昨日ダウンロードしたIOS5 SDKと、UIToolbarの背景をカスタムイメージに設定するために使用するこのコードが機能しなくなりました。ターゲットをIOS4.3以下に設定した場合、それでも機能します。
[self.bizToolbar insertSubview:[[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"navbar-iphone.png"]] autorelease] atIndex:0];
IOS 5?
使用できます:[[UIToolBar appearance] setBackgroundImage:toolBarIMG forBarMetrics:UIBarMetricsDefault];
(iOS 5の新機能)
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 列挙型もここにあります
お役に立てれば。
これは私のツールバーで機能しました:
//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];
}
このメソッドはドキュメント化されておらず、バージョン間で変更できるUIToolbarの特定のサブビュー構造に依存しています。つまり、iOS5リリースでおそらく起こったことは
追伸更新された IToolBarクラス 参照を確認すると、UIToolBarをカスタマイズする別の方法が見つかります
これは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