2

我的应用程序有几个 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 背景图像?

谢谢!

4

2 回答 2

2

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

答案是使用这个:

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

而不是您使用的代码。

于 2012-04-11T04:13:46.593 回答
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];
}

它对我来说很成功......也许它会帮助你。

于 2012-04-11T04:53:24.263 回答