linyawen

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

UINavigationBar自定义导航栏背景和按钮,完美支持横屏竖屏旋转,视图控制器可以分别使用自己的导航栏

此方法可以通过Apple审核,导航上的按钮背景需要做,否则看起来不那么和之又谐  . 此方法使用于ios5。0以下


//CustomNavigationBar.h   
@interface UINavigationBar (UINavigationBarCategory)   
UIImageView *backgroundView;   
- (void)setBackgroundImage:(UIImage*)image;   
- (void)insertSubview:(UIView *)view atIndex:(NSInteger)index;   
@end   
  
//CustomNavigationBar.m   
@implementation UINavigationBar (UINavigationBarCategory)   
-(void)setBackgroundImage:(UIImage*)image   
{   
    if(image == nil)   
    {   
        [backgroundView removeFromSuperview];   
    }   
    else   
    {   
        backgroundView = [[UIImageView alloc] initWithImage:image];   
        backgroundView.tag = 1;   
        backgroundView.frame = CGRectMake(0.f, 0.f, self.frame.size.width, self.frame.size.height);   
        backgroundView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;   
        [self addSubview:backgroundView];   
        [self sendSubviewToBack:backgroundView];   
        [backgroundView release];   
    }   
}   
  
//for other views   
- (void)insertSubview:(UIView *)view atIndex:(NSInteger)index   
{   
    [super insertSubview:view atIndex:index];   
    [self sendSubviewToBack:backgroundView];   
}   
@end   
  
//YourViewController.m   
- (void)viewWillAppear:(BOOL)animated   
{   
    [super viewWillAppear:animated];   
    [self.navigationController.navigationBar   
        setBackgroundImage:[UIImage imageNamed:@"navigation_bar_bg.png"]];   

 

//判断设备的版本

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 50000  

    if ([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)]){  

       //ios5 新特性  

        [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"titleBar.png"] forBarMetrics:UIBarMetricsDefault];  

    }  

#endif  


}  

posted on 2012-07-16 20:17  linyawen  阅读(809)  评论(0编辑  收藏  举报