2011-11-30 102 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]; 
}