在iOS5中自定义UINavigationbar

时间:2011-10-18 11:24:51

标签: uinavigationbar xcode4.2

更新到Xcode 4.2后,我遇到了麻烦。 在我使用以下代码制作自定义导航栏之前,但是当我使用iPhone 5.0模拟器时,它失败了,而在iPhone 4.2模拟器中则没问题。

我可以知道这是什么问题,我该如何解决这个问题?

非常感谢

@implementation UINavigationBar (UINavigationBarCustomDraw)
- (void) drawRect:(CGRect)rect {

   [self setTintColor:[UIColor colorWithRed:0.4f
                                    green: 0.0f
                                     blue:0.4f 
                                    alpha:1]];

   if ([self.topItem.title length] > 0 && ![self.topItem.title isEqualToString:@""]) 
   {
        [[UIImage imageNamed:@"purple.jpg"] drawInRect:rect];   
   }
}

@end

2 个答案:

答案 0 :(得分:2)

如果你需要带有一些图像的自定义UINavigationbar,那么你需要将这个代码放在rootViewController中,这是导航堆栈的第一个视图(A> B> C,所以你必须把它放在A中)

- (void)viewDidLoad
{
  [super viewDidLoad];

  [[UIDevice currentDevice] systemVersion];

  if ([[[UIDevice currentDevice] systemVersion] floatValue] > 4.9) {

      //iOS 5
      UIImage *toolBarIMG = [UIImage imageNamed: @"purple.jpg"];  

      if ([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)]) { 
         [[UINavigationBar appearance] setBackgroundImage:toolBarIMG forBarMetrics:UIBarMetricsDefault]; 
      }

      } else {

      //iOS 4
      [self.navigationController.navigationBar insertSubview:[[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"purple.jpg"]] autorelease] atIndex:0];  
       }
   }
} 

答案 1 :(得分:2)

不要像Jojas那样做。这是使用可以随iOS更新而更改的内部类详细信息。在iOS 5上使用Appearance API。

在这里查看适用于iOS 5和iOS 4的内容Custom UINavigationBar Background