2010-11-30 14 views

答えて

8

あなたはUINavigationBarを変更するtintColorプロパティを使用することができますが、例えば、あなたがあなた自身のUINavigationBarサブクラスを提供する必要があります背景として画像を設定し、drawRect:メソッドをオーバーライドする:

- (void)drawRect:(CGRect)rect { 
    // Drawing code 
    UIImage *img = [UIImage imageNamed: @"background-image.png"]; 
    [img drawInRect:CGRectMake(0, 
           0, 
           self.frame.size.width, 
           self.frame.size.height)]; 
} 

UIビルドを使用してカスタムナビゲーションバーを使用する場合は、インターフェイスビルダでUINavigationBar要素を選択し、インスペクタを開き、[ID]タブでクラスフィールドにUINavigationBarサブクラスを指定します。

Example screenshot showing custom UINavigationBar subclass

+0

今、私はUINavigationControllerの内部を示すために、UINavigationBarを設定するのですか? – Moshe

+0

良い質問 - それに応じて回答が修正されました。 –

+0

純粋にコードで可能ですか?また、これはHIGを全く壊しますか? – Moshe

7

ナビゲーションバーに画像を表示するには、実際にはそれほど難しくありません。 (それはUINavigationBarにカスタムカテゴリを追加します)UINavigationBar+CustomBackground.mとして保存:

@implementation UINavigationBar (CustomBackground) 

- (void)drawRect:(CGRect)rect { 
    UIImage *image = [UIImage imageNamed:@"NavMain.png"]; 
    [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; 
} 

@end 
+1

カテゴリを使用すると、*すべての*ナビゲーションバーの背景が取り消し不能に変更されます。あなたはサブクラスを使う方が良いです。 –

+0

異なるビューコントローラ上に異なるナビゲーションバーが必要になるまでこのメソッドを使用しました。その後、このメソッドは残念なことに失敗します –

+0

実際には、いくつかのクラス検出を行い、クラスに基づいて異なる動作をすることができます。あなたはまだ、しかし、デフォルトの動作を再実装する必要があります。 – Moshe

関連する問題