sagezhong

Swift4.0设置状态栏颜色
摸索了一晚上解决了在Swift4.0后怎么设置iOS应用状态栏的颜色,这里主要记录的是设置不同控制器的颜色,在查找...
扫描右侧二维码阅读全文
17
2019/02

Swift4.0设置状态栏颜色

摸索了一晚上解决了在Swift4.0后怎么设置iOS应用状态栏的颜色,这里主要记录的是设置不同控制器的颜色,在查找了很多资料之后,发现很多都是错误的,最后终于在stackoverflow找到了解决办法。

如果要设置全局的状态栏颜色可以直接修改工程的设置就行了,我主要是设置某一个页面的状态栏颜色,遇到的问题是首先我是在UITabBarController下设置了三个子的UINavigationController,然后要修改其中一个UINavigationController的状态栏颜色。

以前的方法行不通,查阅后我发现重写preferredStatusBarStyle可以修改状态栏的颜色,当然首先要修改info.plist文件,添加一个View controller-based status bar appearance设置为YES。然后我直接在UINavigationController子控制器下重写

override var preferredStatusBarStyle: UIStatusBarStyle {
     //默认是 .default 是黑色的
      return .lightContent
}

启动应用后发现并没有变化,查阅了别人的博客后说的是

UINavigationController不会将 preferredStatusBarStyle调用转给它的子视图,而是由它自己管理状态,而且它也应该那样做。因为UINavigationController 包含了它自己的状态栏 ,因此就算 UINavigationController中的viewController 实现了 preferredStatusBarStyle方法也不会调用 那 UINavigationController是怎么决定该返回 UIStatusBarStyleLightContent 还是 UIStatusBarStyleDefault的呢?
它是基于它的 UINavigationBar.barStyle属性,默认(UIBarStyleDefault)的是黑色文本的状态栏,而 UIBarStyleBlack是设置为白色文本的状态栏

但是我这样设置之后也是没有效果,也尝试了其他方法,最后发现只需要拓展UINavigationController就能实现了

extension UINavigationController {

   open override var preferredStatusBarStyle: UIStatusBarStyle {
      return topViewController?.preferredStatusBarStyle ?? .default
   }
}

重写preferredStatusBarStyle,给它返回最顶部的视图的preferredStatusBarStyle就能实现了!

Last modification:November 24th, 2019 at 09:31 pm
请随意赞赏

2 comments

  1. hagfvznlea

    对生命本质的追问充满哲学思辨。

  2. pudkcbavpc

    不错不错,我喜欢看 www.jiwenlaw.com

Leave a Comment Cancel reply