2011-06-08 13 views
27

昨日、UIToolbarの背景をカスタム画像に設定するために使用するこのコードをダウンロードしたIOS5 SDKが動作を停止しました。ターゲットをIOS4.3に設定してもそれを下回っても動作します。IOS5 SDKのUIToolbarのカスタム背景画像

[self.bizToolbar insertSubview:[[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"navbar-iphone.png"]] autorelease] atIndex:0]; 

誰でもIOS 5でこれが発生しましたか?

+2

iOS5をので、私はあなたがAppleの専用フォーラム上のポインタのための唯一の – Vladimir

答えて

49

:(iOSの5の新機能)[[UIToolBar appearance] setBackgroundImage:toolBarIMG forBarMetrics:UIBarMetricsDefault];

+0

これはすばらしく、すべての*あなたのナビゲーションバーの背景をきちんと設定するので、それぞれにする必要はありません。正しい方向に私を指してくれてありがとう。 – Chris

+0

UIToolbarに相当するものはありますか? – Chris

+59

[[UIToolbar appearance] setBackgroundImage:barsBack forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault] – Chris

3

この方法は文書化されておらず、UIToolbarの特定のサブビュー構造に依存しており、バージョン間で変更することができます。 iOS5のリリースで起こったことはまさにその通りです。

P.S.あなたが更新さUIToolBar class参照をチェックする場合は、UIToolBar

+0

Validmirのおかげで、それを議論することができると思いNDAの下にあります。私は文書をチェックします。私はこれを試してみましたが、すべてのIOSバージョンで動作します。 @interface WoodenToolbar:UIToolbar {} - (void)drawRect :(CGRect)rect; @end @implementation WoodenToolbar - (ボイド)のdrawRect:(CGRect)RECT { UIImage *画像= [UIImage imageNamed: "ナビゲーションバー-iphone.png" @]。 [image drawInRect:CGRectMake(0、 0, self.frame.size.width、 self.frame.size.height)]; } @end – StackThis

35

をカスタマイズするための別の方法を見つけることができますあなたはiOS5をベータ版SDKをリンクされたと、あなたは がここiOS 4.3 to iOS 5.0 API Differencesを見てみましょう、これを実現するために、この

if([navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)]) { 
     //iOS 5 new UINavigationBar custom background 
     [navigationBar setBackgroundImage:image forBarMetrics: UIBarMetricsDefault]; 
} 

ような何かを行うことができます と「UINavigationBar.h」

を検索したり、ここに新しいメソッドのシグネチャ setBackgroundImage:forBarMetrics:

をよく見てとります

UIBarMetrics列挙型

これが役に立ちます。

+0

ありがとうございました!これは完全に成功しました – shabbirv

10

これは私のツールバーに取り組んだ:あなたが使用することができます

//toolBar background image set based on iOS version 
    [[UIDevice currentDevice] systemVersion]; 

    if ([[[UIDevice currentDevice] systemVersion] floatValue] > 4.9) { 

     //iOS 5 
     UIImage *toolBarIMG = [UIImage imageNamed: @"toolBar_brown.png"]; 

     if ([toolBar respondsToSelector:@selector(setBackgroundImage:forToolbarPosition:barMetrics:)]) { 
      [toolBar setBackgroundImage:toolBarIMG forToolbarPosition:0 barMetrics:0]; 
     } 

    } else { 

     //iOS 4 
     [toolBar insertSubview:[[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"toolBar_brown.png"]] autorelease] atIndex:0]; 

    } 
+6

'-respondsToSelector'チェックは、新しい方法や古い方法を使うかどうかを判断するのに十分なはずなので、システムのバージョンを確認する必要はありません(これは一般的には良い方法ではありません)。 –

+0

ios5は正常に機能していますが、ios 4は応答していません。私は何をすべきか? – Hiren

0

これはシモーヌの答えと同じラインに沿っているが、iOSの5とiOSのために働く< 5.これが私がアプリで使っているものです。アプリの初期化のどこかで[UINavigationBar setupIos5PlusNavBarImage]に電話する必要があります(applicationDidFinishLaunching:は良い候補です)。 iOS 5以降では、setupIos5PlusNavBarImageは新しいUIAppearanceプロトコルを使用して背景を設定し、drawRectオーバーライドは無視されます。 iOS <では、setupIos5PlusNavBarImageは基本的にノーオペレーションになり、drawRectはイメージの描画を処理します。

インタフェース:

@interface UINavigationBar (CustomNavigationBar) 

+ (void) setupIos5PlusNavBarImage; 

- (void) drawRect: (CGRect) rect; 

@end 

実装:

@implementation UINavigationBar (CustomNavigationBar) 

+ (void) setupIos5PlusNavBarImage 
{ 
    if ([UINavigationBar respondsToSelector: @selector(appearance)]) 
    { 
     [[UINavigationBar appearance] setBackgroundImage: [UIImage imageNamed: @"menuBar.png"] forBarMetrics: UIBarMetricsDefault]; 
    } 
} 

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

@end