美文网首页Swift日常
iOS Swift 状态栏的颜色更改(深色背景/浅色背景), 修

iOS Swift 状态栏的颜色更改(深色背景/浅色背景), 修

作者: 薰衣香 | 来源:发表于2021-01-11 23:18 被阅读0次

    解决问题: Setter for 'statusBarStyle' was deprecated in iOS 9.0: Use -[UIViewController preferredStatusBarStyle]

    iOS9.0以后已经不在建议直接设置preferredStatusBarStyle的值的方式控制状态栏颜色. 

    解决办法:

    Step 1: 在info.plist 中增加 View controller-based status bar appearance , 并且设置为YES. 非常重要: 否则第二步的代码不会被调用.

    设置默认的屏幕StatusBar显示状态

    Step 2: 在要控制页面StatusBar显示样式的VC 添加如下代码:

    设置本页面为的statusBar为lightContent

    拓展知识: 解决preferredStatusBarStyle 无效的问题

    关于这个问题. 需要分如下三种情况考虑:

    Case 1: 没有使用导航栏控制器(纯VC.没有导航栏.)

    Case 2:使用了系统的导航栏控制器(navigationController)

    Case 3:使用了自定义的导航栏控制器;

    前提: 在info.plist 中增加 View controller-based status bar appearance , 并且设置为YES.  请不要误设置为NO

    Case 1: 没有使用导航栏控制器(纯VC.没有导航栏.)

    在需要控制状态栏的VC中加入如下代码: (我的状态栏是深色背景,因此我希望状态栏显示白色文字.lightContent. 如果你需要黑色文字. return .default即可.)

    重写preferredStatusBarStyle即可.

    如果需要强制更新本页面的状态栏. 可以在调用setNeedsStatusBarAppearanceUpdate() 来触发. 一般我放倒viewWillAppear中去触发. 


    Case 2:使用了系统的导航栏控制器(navigationController)

    如果使用了导航栏. 不论是自定义导航栏或者是系统导航栏. 那么重写preferredStatusBarStyle就不会被调用了. 主动调用setNeedsStatusBarAppearanceUpdate()也不会起作用. 因为这个时候, 状态栏的颜色由状态栏一体控制了. 

    因此也不必重写preferredStatusBarStyle, 或者调用了. setNeedsStatusBarAppearanceUpdate(). 直接将状态栏的barStyle设置为.black(我需要浅色文字, 你可以根据自己的需要设置/ .default / .blackTranslucent / .blackOpaque). 

    设置barStyle用来更改StatusBar样式


    Case 3:使用了自定义的导航栏控制器

    如果使用了自定义的导航栏样式. 那么上述两种控制方式都将失效. 我们需要使用新的方法来控制. 在自定义的导航栏控制器中重写:childForStatusBarStyle. 

    重写childForStatusBarStyle.

    然后. 在想要改变状态栏的VC中. 重写preferredStatusBarStyle即可. 就能控制状态栏的颜色了.

    这种情况不用修改导航栏样式(不用写 self.navigationController?.navigationBar.barStyle = .black),也不用主动去调用 setNeedsStatusBarAppearanceUpdate() 方法,因为自定义的 BSMobileFillViewController 导航控制器中重写的 childForStatusBarStyle 属性中返回了 topViewController 就是为了告诉系统去调用栈顶的控制器(topViewController)里边的 preferredStatusBarStyle 属性值来更新状态栏样式。

    相关文章

      网友评论

        本文标题:iOS Swift 状态栏的颜色更改(深色背景/浅色背景), 修

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