iOS开发-更改导航栏的背景颜色和状态栏的颜色

之前在开发的时候,有几个界面需要更改导航栏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

你可能感兴趣的:(iOS开发-更改导航栏的背景颜色和状态栏的颜色)