最近在学习Swift的时候,重新梳理了一遍修改状态栏的知识点
状态的的修改分为两个方法:
1. 以UIAPPlication为准 设置 UIApplication.shared.statusBarStyle 的值来确定状态栏的风格,UIApplication.shared.statusBarStyle 为枚举:.default .lightContent(iOS 7.0) .darkContent(iOS 13.0) 前提是在plist.info文件中设置View controller-based status bar appearance 的值为false
2. 以控制器中重写父类的preferredStatusBarStyle属性的get方法为准 来设置状态栏的风格,返回值为 UIStatusBarStyle类型的枚举,枚举值分别是: .default .lightContent(iOS 7.0) .darkContent(iOS 13.0) , 前提是在plist.info文件中设置 View controller-based status bar appearance 的值为true
以上dackContent的值为iOS13 暗黑风格新添加的属性. 如果不需要适配暗黑属性,可在info文件中设置 User Interface Style 的值为 Light
动态设置状态栏的风格:
第一种方法 可以直接设置设置UIApplication.shared.statusBarStyle即可。
第二种方法,在父类变量preferredStatusBarStyle的get方法中 返回一个控制状态栏的变量,在需要改变风格的时候 改变控制状态栏变量的值,然后调用setNeedsStatusBarAppearanceUpdate()方法,这个方法调用之后 系统会自动再去读取preferredStatusBarStyle变量返回的值,即可设置状态栏的风格。
在有导航控制器中,使用preferredStatusBarStyle修改状态栏风格
此时要注意,需要重写NavigationController的childForStatusBarStyle和childForStatusBarHidden方法,才能够在viewController中设置生效:
extension UINavigationController {
open override var childForStatusBarStyle: UIViewController? {
return viewControllers.last
}
open override var childForStatusBarHidden: UIViewController? {
return viewControllers.last
}
}