*设置导航栏背景样式有两个方法,setBackgroundImage:forBarMetrics:
和 setBarTintColor:
推荐使用前者。
理由是:
在 iOS 8.2 或者之前的版本,如果导航栏的 translucent
值为true
时,用 barTintColor
去设置导航栏的背景样式,然后改变barTintColor
的颜色,那么当边缘左滑返回手势取消的时候导航栏的背景色会闪烁。
为了避免这种情况发生,推荐用setBackgroundImage:forBarMetrics
: 来改变导航栏的背景样式。
*translucent
这个属性的值在初始化后尽量不要随意修改,否则容易发生界面的布局错乱。
*当translucent
为 true 时,可以用以下方法使导航栏背景透明:
navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default)
navigationController?.navigationBar.shadowImage = UIImage() // shadowImage 就是那根 1px 的细线
当需要改变导航栏背景色的透明度时,可以改变 setBackgroundImage:forBarMetrics:
中 image 的 alpha 值。
如果需要显示或隐藏导航栏,一般只需要在viewWillAppear:
里设置,代码如下:
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
navigationController?.setNavigationBarHidden(hidden, animated: animated)
}
最好不要在 viewWillDisappear:
或者其他发生跳转的方法里去设置,这样不容易管理。还是那句宗旨,你只需要关心当前 view controller
导航栏的样式。
当然最好还是不要隐藏导航栏,因为和系统边缘右滑返回手势一起使用可能会触发一些苹果的 bug。
网友评论