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

时间:2011-11-30 12:32:35

标签: iphone uinavigationbar

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

如果我为运行OS版本5的iPhone创建构建...如果有人下载应用程序并尝试在运行OS版本较小的5的设备上运行,是否会出现任何问题?

由于

3 个答案:

答案 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中设置背景,那么回答描述了如何通过添加子视图或使用类别来实现它:

iPhone - NavigationBar Custom Background

答案 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];
}