导航控制器第一个界面
首先我是改变导航控制器第一个界面的状态栏颜色,可以重写下面的方法
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
然而这只能改变导航控制器的第一个界面的状态栏颜色,由第一个界面导航push过去的后面的界面都不能改变。
导航控制器的其他界面
想要改变导航push过去的其他界面的状态栏颜色,而且不影响别的界面,可以在viewWillAppear方法中
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
//设置状态栏为白色
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
}
再在viewWillDisappear方法中设置回来
- (void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
// 如果不想让其他页面的导航栏变为透明 需要重置
[self.navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
[self.navigationController.navigationBar setShadowImage:nil];
self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName:[UIColor blackColor]};
//设置状态栏为黑色
self.navigationController.navigationBar.barStyle = UIBarStyleDefault;
}
但是这个方法对控制器的第一个界面的状态栏无效,如果在第一个界面写了,虽然不会改变第一个界面状态栏的颜色,但是会改变它所有的子控制器,即由第一个界面push过去的界面状态栏颜色。
而且上面的方法只能设置为白色或是黑色两种。
更多详细的用法请看下面文章,总有一个你用得上的
参考文章
iOS 更改状态栏、导航栏颜色的几种方法
ios 实现自定义状态栏StatusBar 和 导航栏navigationBar 的状态和颜色
【iOS开发】强制修改 iOS 状态栏颜色