之前在开发的时候,有几个界面需要更改导航栏UINavigationController的背景颜色和状态栏的颜色,倒是踩了一些坑,总结分享一下。
1、改变导航栏的背景颜色和item的颜色
self.navigationController?.navigationBar.setBackgroundImage(UIImage(named: "nav_bar_bg"), for: .default)
self.navigationController?.navigationBar.tintColor = .white
self.navigationController?.navigationBar.titleTextAttributes =
[NSForegroundColorAttributeName: UIColor.white]
- PS:1、"nav_bar_bg",图需要设计提供一张背景图给我们,宽度为1,如果想要覆盖到状态栏的话,高度为64即可。2、
navigationBar.tintColor
是更改按钮的文字颜色和图标的颜色,如果不需要,可以不写。3、navigationBar.titleTextAttributes
是更改title的文字的颜色,如果不需要,也可以不写。
2、修改状态栏的颜色要分情况:
①、如果ViewController不是UINavigationController的子类,调用 preferredStatusBarStyle 是可以改变状态栏文字的颜色,相反则不能。因为 UINavigationController 有自己的状态栏,需要自己管理,所以它的子类是不会走 preferredStatusBarStyle 方法;如果想要某个viewController改变,可以使用 UINavigationBar.barStyle属性,或者 将导航栏隐藏后,
self.navigationController.navigationBarHidden=YES
,再重写preferredStatusBarStyle
方法。②、如果不是UINavigationController的子类,则需要在viewController里面重写
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
- ③、如果是UINavigationController的子类,则直接设置。
self.navigationController?.navigationBar.barStyle = .black
UIBarStyle枚举:.default、.black