为了账号安全,请及时绑定邮箱和手机立即绑定

Swift——preferredStatusBarStyle状态栏颜色

标签:
Java

最近在设置某些页面状态栏颜色的时候出现了属性不响应的问题

    override var preferredStatusBarStyle: UIStatusBarStyle {        return .lightContent
    }

依稀记得是直接重写preferredStatusBarStyle: UIStatusBarStyle这个属性,然后将info.plist中的View controller-based status bar appearance设置为NO

webp


但是这样设置之后发现还是不响应。


环境相关:swift 4.2 , Xcode 10.0

然后我就开始各种搜索和尝试,发现如果是自定义的UINavigationController,现在需要重写另外一个属性

/// 重写此方法让 preferredStatusBarStyle 响应
    override var childForStatusBarStyle: UIViewController? {        return self.topViewController
    }

为什么要重写这个东西呢?
因为这两个方法默认返回值是nil
也就是当我们调用setNeedsStatusBarAppearanceUpdate的时候,系统会调用Container(容器控制器)的preferredStatusBarStyle这个方法(window?.rootViewController的preferred的方法,一般我们用UINavigationController或者UITabBarController来做Container),也就是根本不会调用子控制器(我们所看到的UIViewcontroller)的preferredStatusBarStyle方法。
这个时候childForStatusBarHidden和childForStatusBarStyle两个方法就派上用场了。

并且将info.plist中的View controller-based status bar appearance设置为YES

webp


然后设置状态栏的属性就可以响应了!


基本看到的文章都是把另外一个属性也重写,关于隐藏的

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

但是我测试了一下返现不用写,隐藏属性可以直接生效

    override var prefersStatusBarHidden: Bool {        return true
    }

看到说如果是有自定义UITabBarController的,需要重写这个属性。但是我没有尝试,放出来给个提醒好了

override var childViewControllerForStatusBarStyle: UIViewController? {    return self.selectedViewController
}

最后我尝试将info.plist中的View controller-based status bar appearance直接删掉,发现也是可以的,可能这个属性默认为YES。

总结,敲黑板啦。如果想设置某个页面状态栏为白色

1.重写状态栏样式
    override var childForStatusBarStyle: UIViewController? {        return self.topViewController
    }
2.在自定义的UINavigationController中重写此方法
    /// 重写此方法让 preferredStatusBarStyle 响应
    override var childForStatusBarStyle: UIViewController? {        return self.topViewController
    }



作者:Bart_Simpson
链接:https://www.jianshu.com/p/395acc02234b


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消