2009-11-07 13 views
32

मैं अपनी नेविगेशन बारआईफोन नेविगेशन बार पर पृष्ठभूमि छवि कैसे जोड़ें?

पर एक छवि पृष्ठभूमि जोड़ना चाहता हूं, यह सही है? श्रेणी में विधि:

//set custom background image 
UIImageView *backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"NavigationBackground.png"]]; 
[self.navigationBar insertSubview:backgroundView atIndex:0]; 
[backgroundView release]; 
+0

मुझे यह कोड पसंद है क्योंकि श्रेणियों के उपयोग की अनुशंसा नहीं की जाती है! आप देखेंगे कि अगर आप इसका इस्तेमाल करते हैं तो यह ठीक काम करता है। – Steve

उत्तर

98

यहां link @luvieere का कोड दिया गया है। सिर्फ @implementation rootviewController

@implementation UINavigationBar (CustomImage) 
- (void)drawRect:(CGRect)rect { 
    UIImage *image = [UIImage imageNamed:@"NavigationBar.png"]; 
    [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; 
} 
@end 

iOS 5 के जैसा कि ऊपर rootview नियंत्रक में यह कोड पेस्ट करें, वहाँ यह करने के लिए एक अधिकारी तरीका है। (iOS Developer Library देख)

// someplace where you create the UINavigationController 
if ([navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)]) { 
    UIImage *image = [UIImage imageNamed:@"NavigationBar.png"]; 
    [navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault]; 
} 

लेकिन फिर भी, जब तक आप वास्तव में आईओएस 4 और नीचे खाई करना चाहते पिछली संगतता के लिए पुराना कोड।

+2

@luvieere के लिए अपवॉट करना न भूलें, वह अपने क्रेडिट का हकदार है। – iwat

0

तुम भी एक वर्ग है कि UINavigationBar वर्ग फैली जोड़ सकते हैं और drawRect रद्द कर सकते थे।

+0

ताकि कोड सही है? मैं अभी तक कोशिश नहीं करता! : डी – Momi

+0

यह कहना मुश्किल है। आप इसका उपयोग कहां करेंगे? बार बार प्रदर्शित होने पर आपको पृष्ठभूमि छवि दृश्य को सामने लाने की आवश्यकता हो सकती है – nduplessis

32

आपका कोड अकेले नहीं करेगा, आपको इसे कार्य करने के लिए एक श्रेणी लिखनी होगी। आपको इसे करने के तरीके के बारे में दो दृष्टिकोण हैं: पहला व्यक्ति छवि को आपके UINavigationBar का एक सबव्यूव बनाने और इसे अपने UIViewController की viewDidAppear विधि में प्रत्येक के सामने लाने के लिए शामिल है। हालांकि, UIBarButtonItem को कवर करने के साथ कुछ मुद्दों के बारे में बताया गया है। अन्य विधि अधिभावी

- (void)drawRect:(CGRect)rect

और वहाँ छवि ड्राइंग शामिल है। इन दोनों को व्यापक रूप से this blog चर्चा में शामिल किया गया है ..

9

सबसे आसान तरीका सिर्फ UINavigationBar परत सामग्री सेट है।

NSString *barBgPath = [[NSBundle mainBundle] pathForResource:@"mybgimage" ofType:@"png"]; 
[nBar.layer setContents: (id)[UIImage imageWithContentsOfFile: barBgPath].CGImage]; 

नकारात्मक पक्ष बटन उचित रंग के आधार पर जेनरेट नहीं कर रहे हैं, लेकिन आप जो कुछ भी अपने bg छवि के सबसे करीब है और रंग का ध्यान रखा जाना चाहिए करने के लिए नेविगेशन बार रंग सेट कर सकते हैं।

+0

यह विधि बहुत आसान है और आपको ड्राइंग के लिए उपयोग की जाने वाली छवियों के रूप में अधिक लचीलापन देता है। मैंने अभी कोशिश की और यह बहुत अच्छा काम करता है! बस 'क्वार्ट्जकोर' लाइब्रेरी आयात करना याद रखें। – FreeAsInBeer

+0

महान काम करता है, धन्यवाद। मैं श्रेणियों को स्पष्ट करने की कोशिश करता हूं, मैंने उन्हें अविश्वसनीय पाया है, इसलिए यह बहुत अच्छा है। प्रॉक्सी उपस्थिति का उपयोग कर – Chris

8

मैं की तरह

+ (void)Generalstyle { 
    //navigationbar 
    UINavigationBar *navigationBar = [UINavigationBar appearance]; 
    [navigationBar setBackgroundImage:[UIImage imageNamed:@"navigation.png"] forBarMetrics:UIBarMetricsDefault]; 

} 

AppDelegate कुछ में ऐसा और

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 

    [[self class] Generalstyle]; 

} 

ज फ़ाइल में होगा:

+ (void) Generalstyle; 
2

जब iphone 5 आ हम दोनों डिवाइस स्थापित करने के लिए प्रकार। तो अधिक जानकारी के लिए इस

if([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)]) { 
//iOS 5 new UINavigationBar custom background 
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"navbg_ForiPhone5_Imagename.png"] forBarMetrics: UIBarMetricsDefault]; 
} else { 
[self.navigationController.navigationBar insertSubview:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"navbg_ForOtherIphone_Imagename.png"]] atIndex:0]; 
} 

का उपयोग इस link

8
iOS5 में

में जाओ, मैं नेविगेशन पट्टी पृष्ठभूमि छवि (सभी नेविगेशन पट्टी छवि के लिए) AppDelegate.m में सेट:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    [application setStatusBarStyle:UIStatusBarStyleBlackOpaque animated:NO]; 
    UIImage *navBarBackgroundImage = [UIImage imageNamed:@"nav_bg"]; 
    [[UINavigationBar appearance] setBackgroundImage:navBarBackgroundImage forBarMetrics:UIBarMetricsDefault]; 
    return YES; 
} 
+1

+1 –

0

क्या मैंने अभी जिस छवि को मैं चाहता था उसके साथ एक यूआईएममेज बनाया था और इस तरह नेविगेशन बार में जोड़ा गया था।

UIImage *image = [UIImage imageNamed:@"yourImage.png"]; 

[[UINavigationBar appearance] setBackgroundImage:image forBarMetrics:UIBarMetricsDefault]; 
2

7 इस iOS 6 में ठीक काम कर रहा एक और

UINavigationBar *navBar = [[self navigationController] navigationBar]; 
    UIImage *backgroundImage = [UIImage imageNamed:@"nav-bar-background-normal"]; 
    [navBar setBackgroundImage:backgroundImage forBarMetrics:UIBarMetricsDefault]; 
1

स्विफ्ट संस्करण:

let navBar = UINavigationBar.appearance(); 
navBar.setBackgroundImage(UIImage(named: "yourImageName"), forBarMetrics: .Default) 

अपडेट किया गया स्विफ्ट 3.2:

let navBar = UINavigationBar.appearance(); 
     navBar.setBackgroundImage(UIImage(named: "yourImageName"), for: .default) 
0

नेविगेशन बार पृष्ठभूमि छवि जोड़ने के दौरान, आपको इसके आयामों के बारे में बहुत सावधान रहना चाहिए। कृपया सुनिश्चित करें कि आपके पास विभिन्न स्क्रीन आकारों के लिए निम्नलिखित आयाम हैं।

1) background.png =>320x44
2) [email protected] =>640x88 // iPhone5 के लिए और रेटिना उपकरणों
3) पृष्ठभूमि @ 3x के लिए इस्तेमाल किया .png =>1334x183 // आईफोन 6

पृष्ठभूमि छवि जोड़ने और नेविगेशन बार की पृष्ठभूमि छवि में किसी भी टाइलिंग से बचने के लिए निम्न कोड का उपयोग करें।

[self.navigationController.navigationBar setBackgroundImage:[[UIImage imageNamed:@"background"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0) resizingMode:UIImageResizingModeStretch] forBarMetrics:UIBarMetricsDefault]; 
0

नेविगेशन बार पर छवि दिखाने के लिए इस कोड को अपने ऐपडिलेगेट क्लास में आज़माएं। यह आपको बहुत मदद करेगा।

[[UINavigationBar appearance] setBackgroundImage:[[UIImage imageNamed:@"headerImg.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)] forBarMetrics:UIBarMetricsDefault]; 
संबंधित मुद्दे