改变导航栏和状态栏样式基本做法

在根导航控制器下,通过controller的名称, 设置导航栏和状态栏的颜色和样式, 最基本的做法

viewWillAppear

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
//设置导航条颜色
BaseNavigationController *nav = (BaseNavigationController *)self.navigationController;
nav.statusBarStyle = UIStatusBarStyleLightContent;
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"navBg"] forBarMetrics:UIBarMetricsDefault];
//返回按钮
UIButton *navItem = [UIButton buttonWithType:UIButtonTypeCustom];
[navItem setImage:[UIImage imageNamed:@"leftArrow"] forState:UIControlStateNormal];
[navItem addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside];
navItem.imageEdgeInsets = UIEdgeInsetsMake(0, -20, 0, 0);
navItem.frame = CGRectMake(0, 0, 40, 30);
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:navItem];;

//设置状态栏字体颜色
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
}

viewWillDisappear

1
2
3
4
5
6
7
8
9
- (void) viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
//设置导航条颜色
BaseNavigationController *nav = (BaseNavigationController *)self.navigationController;
nav.statusBarStyle = UIStatusBarStyleDefault;
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageWithColor:[UIColor colorWithHexString:@"0xFFFFFF"]] forBarMetrics:UIBarMetricsDefault];
//设置状态栏字体颜色
self.navigationController.navigationBar.barStyle = UIBarStyleDefault;
}

拓展: 稍微高级一点的,做一个白名单, 在名单中的控制器导航栏会执行上面的方法, 不在名单中的控制器不执行, 就可以改变需要改变状态的控制器的导航栏和状态栏的样式.