2012-02-16 181 views
1

所以我有UINavigationController的一个类别,然后我重写init方法如下UINavigationBar - 设置背景图片?

- (id)initWithFrame:(CGRect)frame 
{ 
    if (self = [super initWithFrame:frame]) 
    { 
      UIImage *image = [UIImage imageNamed:@"navBar.png"]; 
      [[UINavigationBar appearance] setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];  
    } 

     return self; 
} 

下面的代码使导航栏的背景图像变成空白(白色)。 图像名称正确,它存在于项目中。任何想法是什么导致这个问题?

回答

4

如果使用iOS4的,可以覆盖 - (无效)的drawRect

@implementation UINavigationBar (UINavigationBarCategory) 

- (void)drawRect:(CGRect)rect 
{ 
    UIImage *navBg = [UIImage imageNamed:@"navBar.png"]; 
    [navBg drawInRect:rect]; 
} 
@end 

的iOS 5,

if ([[UIDevice currentDevice].systemVersion floatValue] >= 5.0) { 
    if ([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)]){ 

     UIImage *navBarImg = [UIImage imageNamed:@"navBar.png"]; 

     [self.navigationController.navigationBar setBackgroundImage:navBarImg forBarMetrics:UIBarMetricsDefault]; 

    } 
} 
+0

而这个链接可以帮助你 http://stackoverflow.com/questions/ 5272451/overriding-methods-using-categories-in-objective-c – looyao 2012-02-16 04:42:58

+0

那么,iOS4的方法在iOS5中将无法工作? – karim 2014-05-09 18:25:12