自定义转场动画导致无法改变statusBar隐藏和颜色

修改statusBar隐藏和颜色是通过重写prefersStatusBarHiddenpreferredStatusBarStyle这两个属性,并调用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则不存在这个问题。

参考

你可能感兴趣的:(自定义转场动画导致无法改变statusBar隐藏和颜色)