2012-05-14 26 views
3

我使用「防禦性」代碼將定製圖像設置爲UINavigationBar欄 - 它適用於使用ios5或更高版本的設備。iOS上的UINavigationBar上的自定義圖像<5.0

一些答案後,我編輯的代碼與合併的答案(見下文)

這是正確的&優雅的方式來做到這一點?

if ([[UINavigationBar class] respondsToSelector:@selector(appearance)]) { 
     UIImage *backgroundImage = [UIImage imageNamed:@"tableTitleView.png"]; 
     [self.navigationController.navigationBar setBackgroundImage:backgroundImage forBarMetrics:UIBarMetricsDefault]; 
    } 
    else 
    { 

     NSString *barBgPath = [[NSBundle mainBundle] pathForResource:@"tableTitleView" ofType:@"png"]; 
     [self.navigationController.navigationBar.layer setContents:(id)[UIImage imageWithContentsOfFile: barBgPath].CGImage]; 
    } 
+0

見[此](http://stackoverflow.com/questions/10499259/navigation-controller-not-working-properly/10582222#10582222)鏈路。我認爲這對你會有所幫助。 –

回答

2
float version = [[[UIDevice currentDevice] systemVersion] floatValue]; 
     NSLog(@"%f",version); 
     if (version >= 5.0) { 
      UIImage *backgroundImage = [UIImage imageNamed:@"Myimage.png"]; 
      [self.navigationController.navigationBar setBackgroundImage:backgroundImage forBarMetrics:UIBarMetricsDefault]; 
     } 
     else 
     { 

      NSString *barBgPath = [[NSBundle mainBundle] pathForResource:@"Myimage" ofType:@"png"]; 
      [self.navigationController.navigationBar.layer setContents:(id)[UIImage imageWithContentsOfFile: barBgPath].CGImage]; 
     } 

也許這會幫助你。這個對我有用。

+0

使用'respondsToSelector:'來檢查一個功能是否可用是很煩人的。你不應該只檢查版本。如果Apple更改方法名稱或版本不同,則代碼將會中斷。 – rckoenes

+0

@rckoenes ty的信息。米新到這和這對我的作品,所以我不知道..感謝偉大的信息傢伙... –

+0

感謝Chinttu和rckoenes,我已經改變了上面的問題,結合了兩個答案,假設這是可以接受的其他大師我會除了Chinttu的回答。 – chewy

2

您可以使用此方法: -

#define kSCNavBarImageTag 6183746 
#define kSCNavBarColor [UIColor colorWithRed:0.54 green:0.18 blue:0.03 alpha:1.0] 


+ (void)customizeNavigationController:(UINavigationController *)navController 
{ 
    UINavigationBar *navBar = [navController navigationBar]; 
    [navBar setTintColor:kSCNavBarColor]; 

    if ([navBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)]) 
    { 
     [navBar setBackgroundImage:[UIImage imageNamed:@"navigation-bar-bg.png"] forBarMetrics:UIBarMetricsDefault]; 
    } 
    else 
    { 
     UIImageView *imageView = (UIImageView *)[navBar viewWithTag:kSCNavBarImageTag]; 
     if (imageView == nil) 
     { 
      imageView = [[UIImageView alloc] initWithImage: 
         [UIImage imageNamed:@"navigation-bar-bg.png"]]; 
      [imageView setTag:kSCNavBarImageTag]; 
      [navBar insertSubview:imageView atIndex:0]; 
      [imageView release]; 
     } 
    } 
} 

上都能夠IOS 4和5的工作,如果..else塊是一樣的。

有一個很好的NavIMage tutorial

+0

你從哪裏得到這個神奇的數字? 6183746 – chewy

+0

我在我的應用中使用過這段代碼,只是將它粘貼在這裏:) –