2012-02-28 42 views
0

我正在使用的應用程序具有自定義的色塊欄,但支持iOS 4.2-iOS 5,所以我需要在我的應用程序委託中以舊派的方式設置UINavigationBar背景和色調。iOS中的UINavigationBar色彩閃爍4

@implementation UINavigationBar (UINavigationBarCategory) 

- (void)drawRect:(CGRect)rect { 
    self.tintColor = [UIColor colorWithRed:42.0/255.0 
            green:164.0/255.0 
             blue:182.0/255.0 
            alpha:1.0]; 
    UIImage *img = [UIImage imageNamed:@"navbar_bg.png"]; 
    [img drawInRect:CGRectMake(0.0, 0.0, 
           self.frame.size.width, 
           self.frame.size.height)]; 
} 
@end 

該方法適用於大多數情況,但我注意到,當應用程序是第一次啓動時,UIBarButtonItems閃光燈默認的導航欄顏色第二,他們自行糾正和改變顏色相匹配的導航欄前。有趣的是,導航欄本身使用正確的背景圖像。

要清楚,我使用了setBackgroundImage爲UINavigationBar的上如預期,使閃光燈只在iOS的4

任何人有,爲什麼會發生這種情況和/或如何將任何洞察力作品的iOS 5設備修理它?

+0

在應用程序生命週期的哪個階段,您是否使用引用的代碼調用該類,它是否在viewDidLoad中? – valexa 2012-02-28 20:48:34

回答

0

酒吧按鈕項是錯誤的顏色?您可以在viewDidLoad中手動設置其色調顏色:對於色調顏色

navigationBar.rightBarButtonItem.tintColor = [UIColor ...] 

如果您使用的是筆尖文件。否則,你可以在loadView中做同樣的事情:。無論哪種方式,此代碼將作爲初始繪製循環的一部分執行,因此您將擁有適當的顏色而不會閃爍。

同樣爲了將來的參考,重寫類別內的方法在技術上是不正確的。 (最新版本的Xcode,4.3會給你一個警告)。你應該正確地繼承UINavigationBar或做「方法調整」。但是這很難,所以現在不用擔心:)

+0

這最終成爲解決方案 - 只需手動設置加載的第一個視圖控制器的導航欄色調顏色即可。非常感謝。 – Keller 2012-04-01 00:01:09

0

如果調用類的viewDidLoad中引用的代碼,嘗試將其移動到awakeFromNib