27

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

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

IOS 5でまだこれに遭遇した人はいますか?

4

5 に答える 5

48

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

于 2011-10-21T15:27:46.107 に答える
35

iOS5 beta 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:

また、ここにUIBarMetrics列挙型があります

お役に立てれば。

于 2011-06-14T12:51:37.253 に答える
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]; 

    }
于 2011-10-15T22:57:49.463 に答える
3

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

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

于 2011-06-08T18:38:58.997 に答える
0

これはシモーネの回答と同じですが、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
于 2011-11-30T01:01:49.073 に答える