方法一:自定义一个BaseNavigationViewController : UINavigationController 在初始化方法中加入以下代码,之后就使用BaseNavigationViewController
[self.navigationBar setBackgroundImage:[UIImage imageNamed:@"navigation_bar_background"] forBarMetrics:UIBarMetricsDefault];
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleBlackTranslucent;
方法二:要改变单独控制器的导航栏可以在控制器初始化方法中加入以下代码
// 设置导航栏背景
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navigation_bar_background"] forBarMetrics:UIBarMetricsDefault];
// 设置状态栏
[UIApplication sharedApplication].statusBarStyle = UIBarStyleBlackOpaque;
注意:如果要适配ios7以上版本,要将图片的高度设置为大于44就ok了 比如45的高度就可以
2.设置导航栏主题
#pragma mark 设置导航栏主题
- (void)setNavigationTheme
{
// 1.导航栏
// 1.1.操作navBar相当操作整个应用中的所有导航栏
UINavigationBar *navBar = [UINavigationBar appearance];
// 1.2.设置导航栏背景
[navBar setBackgroundImage:[UIImage imageNamed:@"navigationbar_background.png"] forBarMetrics:UIBarMetricsDefault];
// 1.3.设置状态栏背景
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleBlackOpaque;
// 1.4.设置导航栏的文字
[navBar setTitleTextAttributes:@{
UITextAttributeTextColor : [UIColor darkGrayColor],
UITextAttributeTextShadowOffset : [NSValue valueWithUIOffset:UIOffsetZero]
}];
// 2.导航栏上面的item
UIBarButtonItem *barItem =[UIBarButtonItem appearance];
// 2.1.设置背景
[barItem setBackgroundImage:[UIImage imageNamed:@"navigationbar_button_background.png"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[barItem setBackgroundImage:[UIImage imageNamed:@"navigationbar_button_background_pushed.png"] forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];
[barItem setBackgroundImage:[UIImage imageNamed:@"navigationbar_button_background_disable.png"] forState:UIControlStateDisabled barMetrics:UIBarMetricsDefault];
// 2.2.设置item的文字属性
NSDictionary *barItemTextAttr = @{
UITextAttributeTextColor : [UIColor darkGrayColor],
UITextAttributeTextShadowOffset : [NSValue valueWithUIOffset:UIOffsetZero],
UITextAttributeFont : [UIFont systemFontOfSize:13]
};
[barItem setTitleTextAttributes:barItemTextAttr forState:UIControlStateNormal];
[barItem setTitleTextAttributes:barItemTextAttr forState:UIControlStateHighlighted];
}