美文网首页
preferredStatusBarStyle不执行的原因

preferredStatusBarStyle不执行的原因

作者: Yu_Chou | 来源:发表于2019-08-26 15:44 被阅读0次

    在iOS 9及其之前改变statusbar的颜色比较简单,直接使用
    UIApplication.shared.setStatusBarStyle(.default, animated: true)
    或者UIApplication.shared.statusBarStyle = .default 即可.

    在iOS 10开始 以上的方法被废弃。系统推荐preferredStatusBarStyle进行替换。然而在项目实践中发现preferredStatusBarStyle的get有时并不会执行。

    1、被UINavigationController拦截

    当存在UINavigationController时,statusBar的状态由UINavigationControllerpreferredStatusBarStyle控制,所有不会执行rootVC的重写的preferredStatusBarStyle
    这种情况下需要继承UINavigationController并重写方法。

        override var childForStatusBarStyle: UIViewController? {
            return self.topViewController
        }
    

    这个方法的目的就是让系统到其topViewController中去获取preferredStatusBarStyle的值。

    2、Info.plist中View controller-based status bar appearance被设置为NO

    View controller-based status bar appearance设置为NO表示statusBar的样式是全局控制的,在任意一个地方改变都会影响所有页面的显示效果一般在iOS 9以前配合UIApplication.shared.statusBarStyle = .default使用时会这样设置。然后preferredStatusBarStyleViewController的一个只读属性,这当然不可能全局控制statusBar的样式,所以View controller-based status bar appearance必须设置YES,preferredStatusBarStyle才会执行。

    setNeedsStatusBarAppearanceUpdate更新statusBar样式

    setNeedsStatusBarAppearanceUpdate,调用该方法preferredStatusBarStyle会再次执行。
    通常在同一个ViewcontrollerstatusBar的样式时不会变的,所以preferredStatusBarStyle只会执行一次。如果需要在viewController显示出来后再次修改statusBar的样式。需要在preferredStatusBarStyle变化后调用setNeedsStatusBarAppearanceUpdate方法。

        var darkMode = false
        override var preferredStatusBarStyle : UIStatusBarStyle {
        return darkMode ? .default : .lightContent
    }
    

    相关文章

      网友评论

          本文标题:preferredStatusBarStyle不执行的原因

          本文链接:https://www.haomeiwen.com/subject/jpqdectx.html