在iOS 5中为UINavigationBar设置不同的背景图像

时间:2012-04-11 04:08:00

标签: iphone uinavigationbar background-image

我的应用程序有几个viewControllers,对于其中一些,我想在推送到导航堆栈时使用不同的导航栏背景图像。

例如,当我的mainViewController加载时,我有这个:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    NSLog(@"Setting toolbar for iOS 5+");
    UIImage * navbarImage = [UIImage imageNamed:@"navbar01.png"];
    [[UINavigationBar appearance] setBackgroundImage:navbarImage forBarMetrics:UIBarMetricsDefault];
}

同样,当我的其他viewController被推送到导航堆栈时,我使用与上面相同的代码,除了使用不同的UIImage(navbar02.png)。

但是,导航栏不会与我设置的第一张图像发生变化。当出现新视图时,有没有办法更改UINavigationBar背景图像?

谢谢!

2 个答案:

答案 0 :(得分:2)

以下是类似问题的链接:UINavigationBar setBackgroundImage: forBarMetrics: Not Working

答案是使用这个:

[self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];

而不是您使用的代码。

答案 1 :(得分:1)

float version = [[[UIDevice currentDevice] systemVersion] floatValue];
//  NSLog(@"%f",version);
if (version >= 5.0) {
    UIImage *backgroundImage = [UIImage imageNamed:@"image.png"];
   [self.navigationController.navigationBar setBackgroundImage:backgroundImage forBarMetrics:UIBarMetricsDefault];
}
else
{
   // UIImage *backgroundImage = [UIImage imageNamed:@"image.png"];
    NSString *barBgPath = [[NSBundle mainBundle] pathForResource:@"NavBar" ofType:@"png"];
    [self.navigationController.navigationBar.layer setContents:(id)[UIImage imageWithContentsOfFile: barBgPath].CGImage];
}

它成功地为我工作......也许它会帮助你。