ios 5カスタムナビゲーションバーの問題
ios 5以前のシステムでは、ナビゲーションバーのカテゴリを定義することで、ナビゲーションバーをカスタマイズできます.
しかしios 5では、この方式は役に立たない.詳細はios 5.0リリースの説明を参照してください.
http://developer.apple.com/library/ios/#releasenotes/General/RN-iOSSDK-5_0/_index.html#//apple_ref/doc/uid/TP40010949
したがって、iOS 5.0でカスタムナビゲーションバーを引き続き使用するには、次の2つの方法があります.
1.5.0で新しく提供されたUInavigationBarのメソッドsetBackgroundImage:forBarMetrics:を使用して背景を設定します.
ただし4.0等のシステムとの互換性のため、この方法を使用する前に判断しなければならない:(5.0以前のシステムでは従来の方法を引き続き使用)
(navigationbarを使用する場所ごとにこのメソッドを呼び出す必要があり、変更可能な場所が多い)
2、UINavigationBarのサブクラスを使用する方式で実現する:(この方式ではnavigationbarを使用する場所ごとに修正する必要がなく、怠け者のやり方に属する)
原文:http://www.cnblogs.com/zhulin/archive/2011/10/21/2219949.html
@implementation UINavigationBar (CustomImage)
- (void)drawRect:(CGRect)rect {
// Drawing code
UIImage *image = [[UIImage imageNamed:@"header.png"] retain];
[image drawInRect:CGRectMake(0, 0,self.frame.size.width , self.frame.size.height)];
[image release];
}
@end
しかしios 5では、この方式は役に立たない.詳細はios 5.0リリースの説明を参照してください.
http://developer.apple.com/library/ios/#releasenotes/General/RN-iOSSDK-5_0/_index.html#//apple_ref/doc/uid/TP40010949
iOS 5 ,UINavigationBar, UIToolbar, and UITabBar , drawRect: 。 。
したがって、iOS 5.0でカスタムナビゲーションバーを引き続き使用するには、次の2つの方法があります.
1.5.0で新しく提供されたUInavigationBarのメソッドsetBackgroundImage:forBarMetrics:を使用して背景を設定します.
ただし4.0等のシステムとの互換性のため、この方法を使用する前に判断しなければならない:(5.0以前のシステムでは従来の方法を引き続き使用)
(navigationbarを使用する場所ごとにこのメソッドを呼び出す必要があり、変更可能な場所が多い)
UINavigationBar *navBar = [myNavController navigationBar];
if ([navBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)])
{
// set globablly for all UINavBars
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"brnlthr_nav.jpg"] forBarMetrics:UIBarMetricsDefault];
// ...
}
2、UINavigationBarのサブクラスを使用する方式で実現する:(この方式ではnavigationbarを使用する場所ごとに修正する必要がなく、怠け者のやり方に属する)
@interface MyNavigationBar : UINavigationBar
@end
@implementation MyNavigationBar
- (void)drawRect:(CGRect)rect {
[super drawRect:rect];
}
@end
@implementation UINavigationBar (LazyNavigationBar)
+ (Class)class {
return NSClassFromString(@"MyNavigationBar");
}
-(void)drawRect:(CGRect)rect {
UIImage *backImage = [UIImage imageNamed:@"backNav.png"];
[backImage drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end
原文:http://www.cnblogs.com/zhulin/archive/2011/10/21/2219949.html