2012-02-28 10 views
0

私が開発しているアプリにはカスタムバーがありますが、iOS 4.2-iOS 5をサポートしていますので、私のアプリケーションデリゲートでこの古い学校の方法でUINavigationBarの背景と色合いを設定する必要があります。iOS 4でUINavigationBar tintの色が点滅する

@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は、彼らが自分自身を修正する前に、第2のデフォルトのナビゲーションバーの色が点滅し、ナビゲーションバーに合わせて、色を変更するに気づきました。興味深いことに、ナビゲーションバー自体は、get-goから正しく背景画像を使用します。フラッシュは、誰もがこれを実現および/またはどのようになぜ上の任意の洞察力を持っている唯一のiOS 4

であるので、私は期待どおりに動作のiOS 5デバイスにUINavigationBarためsetBackgroundImageを使用してい

明確にし、修理する?あなたがのviewDidLoadで参照コードを持つクラスを呼び出す場合

+0

アプリケーションのライフサイクルのどの時点で、コードを参照してクラスを呼び出すのですか?それはviewDidLoadですか? – valexa

答えて

0

バーボタンアイテムが間違った色ですし、それを移動してみてください?手動でのviewDidLoadでその色合いの色を設定することができます。色合い色

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

にあなたはnibファイルを使用している場合。そうしないと、loadViewで同じことをすることができます:。どちらの方法でも、このコードは最初の描画ループの一部として実行されるため、点滅することなく適切な色を表示できます。

今後の参考として、カテゴリ内のメソッドをオーバーライドすることは技術的に不適切です。 (Xcode 4.3の最新バージョンではこれに関する警告が表示されます)。 UINavigationBarを適切にサブクラス化するか、「メソッドスウィズル」を行う必要があります。しかしそれはかなり難しいので、今は心配しないでください:)

+0

これは解決策に終わりました。ロードする最初のView Controllerのナビゲーションバーの色を手動で設定するだけです。どうもありがとう。 – Keller

関連する問題