Iphone 为两个不同的操作系统设置导航栏的背景图像

Iphone 为两个不同的操作系统设置导航栏的背景图像,iphone,uinavigationbar,Iphone,Uinavigationbar,我正在使用以下代码为iPhone OS 5的导航栏设置背景图像: [self.navigationController.navigationBar setBackgroundImage:[UIImage ImageName:@“tab bar.jpg”]forBarMetrics:UIBarMetricsDefault] 如果我为运行操作系统版本5的iPhone创建构建…如果有人下载应用程序并尝试在运行操作系统版本5的设备上运行,会不会造成任何问题 感谢iOS 4或更低版本上不提供方法setBa

我正在使用以下代码为iPhone OS 5的导航栏设置背景图像: [self.navigationController.navigationBar setBackgroundImage:[UIImage ImageName:@“tab bar.jpg”]forBarMetrics:UIBarMetricsDefault]

如果我为运行操作系统版本5的iPhone创建构建…如果有人下载应用程序并尝试在运行操作系统版本5的设备上运行,会不会造成任何问题


感谢

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和iOS 5上运行。

根据文档:

 - (void)setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics
因此,您应该检查当前的iOS版本,并在iOS 5上使用:

 setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics.
如果您想在4.0中设置背景,下面的答案描述了如何通过添加子视图或使用类别来实现:


//在.h文件中添加QuartzCore框架工作

#import <QuartzCore/QuartzCore.h>

对您最好在调用该方法之前检查当前的iOS版本。--或者声明您的应用程序仅与iOS 5+兼容。这会阻止它安装在旧的操作系统上。不过,快速检查iOS版本并不太困难。不过,只需检查
respondsToSelector
方法是否提供该方法即可。
#import <QuartzCore/QuartzCore.h>
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];
}