0

次のコードを使用して、UINavigationBarの外観を設定しますが、私の場合、ViewControllerが初めて表示されるときに設定されません。別のViewControllerを押すだけで、設定されます。

UIImage *gradientImage44 = [[UIImage imageNamed:@"navigationBar44"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];

UIImage *gradientImage32 = [[UIImage imageNamed:@"navigationBar32"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];

[[UINavigationBar appearance] setBackgroundImage:gradientImage44 forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setBackgroundImage:gradientImage32 forBarMetrics:UIBarMetricsLandscapePhone];
4

1 に答える 1

0

iOS5以降およびiOS5未満のiOSのUinavigationbar背景画像を設定するにはさまざまな方法があります

iOS 5の場合、アプリデリゲートで以下のコードを使用できます

//Customize the look of the UINavBar for iOS5 devices
 UIImage *gradientImage44 = [[UIImage imageNamed:@"navigationBar44"]   
 resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];

UIImage *gradientImage32 = [[UIImage imageNamed:@"navigationBar32"]    
resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];

 [[UINavigationBar appearance] setBackgroundImage:gradientImage44 
 forBarMetrics:UIBarMetricsDefault];

 [[UINavigationBar appearance] setBackgroundImage:gradientImage32 
  forBarMetrics:UIBarMetricsLandscapePhone];

ただし、iOS 5未満のiOSバージョンを使用している場合は、UINavigationControlをサブクラス化し、drawRectを次のようにオーバーロードする必要があります。

@interface CustomNavigationBar : UINavigationBar
 @end

 @implementation CustomNavigationBar
 -(void) drawRect:(CGRect)rect 
 {
    UIImage *image = [UIImage imageNamed: @"myNavBarImage"];
    [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
 }
@end

// this can go anywhere
+(UINavigationController*) myCustomNavigationController
  {
   YOurViewController *vc = [[[YOurViewController alloc] init] autorelease];
   UINavigationController *nav = [[[NSBundle mainBundle] 
   loadNibNamed:@"CustomNavigationController" owner:self options:nil] objectAtIndex:0];
   nav.viewControllers = [NSArray arrayWithObject:vc];
   return nav;
 }

このように、ナビゲーションバーをカスタマイズでき、すべてのiOSバージョンで有効になります。

を使用してiOS5のチェックを入れることができます

if ([[UINavigationBar class]respondsToSelector:@selector(appearance)]) {
   ///ios 5 and above.
 }
于 2012-11-26T18:42:35.263 に答える