修改statusBar隐藏和颜色是通过重写prefersStatusBarHidden
和preferredStatusBarStyle
这两个属性,并调用setNeedsStatusBarAppearanceUpdate()
方法实现的。如果ViewController是嵌在TabBarController,NavigationController或者PageViewController中,则上述方法是无效的,这个网上很多文章都有详细说明。
这里要说明的是一种出现比较少的情况,如果从VC1使用present的方式跳转到VC2,并且使用自定义动画(UIViewControllerAnimatedTransitioning),上述方法也是不会执行的。解决方法是在VC2初始化时把modalPresentationCapturesStatusBarAppearance
设为true
。
// This controls whether this view controller takes over control of the status bar's appearance when presented non-full screen on another view controller. Defaults to NO.
@available(iOS 7.0, *)
open var modalPresentationCapturesStatusBarAppearance: Bool
这是这个属性的官方说明,这个属性决定VC在非全屏模式下被present
时,是否接管statusBar外观的控制权,默认为NO。因为自定义动画属于非全屏的跳转,所以跳转以后的VC并没有获得statusBar外观的控制权,上面的方法就失效了,而不同的present
则不存在这个问题。