2011-11-30 98 views
0

我正在使用以下代码来设置iPhone OS 5导航栏的背景图像: [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@“tab bar。 jpg“] forBarMetrics:UIBarMetricsDefault];为两个不同的操作系统设置导航栏的背景图像

如果我创建运行OS 5版......如果有人下载该应用程序会造成任何问题,并尝试运行OS版本较低的5设备上运行生成的iPhone?

由于

回答

1

方法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

+0

是。在调用方法之前,您最好检查当前的iOS版本。 ---另外声明您的应用程序仅适用于iOS 5+。这可以防止它安装在较旧的操作系统上。但是,快速检查iOS版本并不困难。 –

+1

尤为明显但只是检查方法是可用的'respondsToSelector'方法。 – rckoenes

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这里是描述通过添加该怎么办呢枯萎答案使用A类子视图或:

iPhone - NavigationBar Custom Background

0

//添加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]; 
}