摸索了一晚上解决了在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就能实现了!
对生命本质的追问充满哲学思辨。
不错不错,我喜欢看 www.jiwenlaw.com