2012-05-14 24 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

我在我的应用中使用过这段代码,只是将它粘贴在这里:) –