web-dev-qa-db-ja.com

IOS5 SDKのUIToolbarのカスタム背景画像

昨日ダウンロードしたIOS5 SDKと、UIToolbarの背景をカスタムイメージに設定するために使用するこのコードが機能しなくなりました。ターゲットをIOS4.3以下に設定した場合、それでも機能します。

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

IOS 5?

27
StackThis

使用できます:[[UIToolBar appearance] setBackgroundImage:toolBarIMG forBarMetrics:UIBarMetricsDefault];(iOS 5の新機能)

49
Simone

IOS5ベータSDKをリンクしたとすると、次のようなことができます

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

これを実現するには、ここを見てください iOS 4.3とiOS 5.0のAPIの違い で「UINavigationBar.h」を検索します

または、ここで新しいメソッドシグネチャを詳しく見てください setBackgroundImage:forBarMetrics:

IBarMetrics 列挙型もここにあります

お役に立てれば。

35
loretoparisi

これは私のツールバーで機能しました:

//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]; 

    }
10
RyeMAC3

このメソッドはドキュメント化されておらず、バージョン間で変更できるUIToolbarの特定のサブビュー構造に依存しています。つまり、iOS5リリースでおそらく起こったことは

追伸更新された IToolBarクラス 参照を確認すると、UIToolBarをカスタマイズする別の方法が見つかります

3
Vladimir

これはSimoneの回答と同じですが、iOS 5およびiOS <5で機能します。これは私がアプリで使用しているものです。アプリの初期化のどこかで[UINavigationBar setupIos5PlusNavBarImage]を呼び出す必要があります(applicationDidFinishLaunching:が適切な候補です)。 iOS 5以降では、setupIos5PlusNavBarImageは新しいUIAppearanceプロトコルを使用して背景を設定し、drawRectオーバーライドは無視されます。 iOS <5では、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
0
stuckj