我使用以下代码为iPhone OS 5设置导航栏的背景图片: [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@“tab bar.jpg”] forBarMetrics:UIBarMetricsDefault];
如果我为运行OS版本5的iPhone创建构建...如果有人下载应用程序并尝试在运行OS版本较小的5的设备上运行,是否会出现任何问题?
由于
答案 0 :(得分:1)
iOS 4或更低版本无法使用方法setBackgroundImage:forBarMetrics:
。
因此调用此方法会使您的应用程序崩溃。
只需检查对象是否对选择器负责:
if ([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)]) {
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"tab bar.jpg"] forBarMetrics:UIBarMetricsDefault];
}
请注意,过度使用iOS 4及更低版本中使用的drawRect:
方法在iOS 5中无效。因此,您必须实现两种方法才能让您的应用在iOS 4和5上运行。
答案 1 :(得分:0)
根据文件:
- (void)setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics
Available in **iOS 5.0 and later.**
所以你应该检查当前的iOS版本和IOS 5使用:
setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics.
如果你想在4.0中设置背景,那么回答描述了如何通过添加子视图或使用类别来实现它:
答案 2 :(得分:0)
//在.h文件中添加QuartzCore框架
#import <QuartzCore/QuartzCore.h>
//如果要为每个视图设置不同的图像。请在viewWillAppear
方法中编写此代码
// NavigationBar
背景图片。
if ([self.navigationController.navigationBar respondsToSelector:@selector( setBackgroundImage:forBarMetrics:)])
{
//For iOS >= 5
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"topbar.png"] forBarMetrics:UIBarMetricsDefault];
}
else {
//For iOS < 5
NSString *barBgPath = [[NSBundle mainBundle] pathForResource:@"topbar" ofType:@"png"];
[self.navigationController.navigationBar.layer setContents:(id)[UIImage imageWithContentsOfFile: barBgPath].CGImage];
}