2012-02-16 130 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