在 iOS 5 中为 UINavigationBar 设置不同的背景图片
Posted
技术标签:
【中文标题】在 iOS 5 中为 UINavigationBar 设置不同的背景图片【英文标题】:Set a different background image for UINavigationBar in iOS 5 【发布时间】:2012-04-11 04:08:00 【问题描述】:我的应用有多个 viewController,对于其中一些,我想在将它们推送到导航堆栈时使用不同的导航栏背景图像。
例如,当我的 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 背景图片?
谢谢!
【问题讨论】:
【参考方案1】:这里是类似问题的链接:UINavigationBar setBackgroundImage: forBarMetrics: Not Working
答案是用这个:
[self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
而不是你使用的代码。
【讨论】:
【参考方案2】: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];
它对我来说很成功......也许它会帮助你。
【讨论】:
以上是关于在 iOS 5 中为 UINavigationBar 设置不同的背景图片的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS 5 中为 UINavigationBar 设置不同的背景图片
在 Objective-C iOS 5 中为 Retina Display 以编程方式更改资源
如何在 iPhone (iOS 5) 上的音乐应用程序中为 UITableViewCell 创建一个弹出窗口
在Xcode 5.0.1(更新的xcode 6)中为3.5,4.0(更新的4.7和5.5)英寸屏幕开发相同的UI,没有风景,没有iPad,没有故事板