为两个不同的操作系统设置导航栏的背景图像
问题描述:
我正在使用以下代码来设置iPhone OS 5导航栏的背景图像: [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@“tab bar。 jpg“] forBarMetrics:UIBarMetricsDefault];为两个不同的操作系统设置导航栏的背景图像
如果我创建运行OS 5版......如果有人下载该应用程序会造成任何问题,并尝试运行OS版本较低的5设备上运行生成的iPhone?
由于
答
方法setBackgroundImage:forBarMetrics:
是不适用于iOS 4或更低。 因此调用此方法会崩溃您的应用程序。
只是检查对象respons到选择:
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
答
工作根据文档:
- (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这里是描述通过添加该怎么办呢枯萎答案使用A类子视图或:
答
//添加QuartzCore frameowrk在.h文件中
#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];
}
是。在调用方法之前,您最好检查当前的iOS版本。 ---另外声明您的应用程序仅适用于iOS 5+。这可以防止它安装在较旧的操作系统上。但是,快速检查iOS版本并不困难。 –
尤为明显但只是检查方法是可用的'respondsToSelector'方法。 – rckoenes