看完本文,小伙伴们将会学会在不同的iOS版本,特别是iOS 15高版本的情况下,如何正确地设置状态栏的样式
最终效果如下
一 、先说几个能在网上找到的答案,经验证这些方法没有效果的情况
过期方法:由Application来控制状态栏
iOS9.0以后,就建议使用ViewController 来控制状态栏
image.png
没用的方法:ViewController 来控制状态栏
根据上面的提示,在ViewController里面来控制状态栏,于是在VC里面写下下面的代码,结果发现,根本就不会调用,也没有效果
//永远都不会调用
override var preferredStatusBarStyle: UIStatusBarStyle {
if #available(iOS 13.0, *) {
return .lightContent
} else {
// Fallback on earlier versions
return .lightContent
}
}
可能您会说,需要在info.plist文件进行配置,于是我们就去info.plist进行配置,如下
image.png
会发现依然,根本就不会调用上面的方法preferredStatusBarStyle:
,也没有效果
这到底是怎么回事?
这实际上是由于 UINavigationController 导致的,由于它通常是 ViewController 里的最高层级,它不会将 preferredStatusBarStyle 请求向下传递,相反,它会根据自身的 UINavigationBar.barStyle 属性来决定系统状态栏到底是黑色还是白色,如果 barStyle 是 .black ,那么系统栏就是 .lightContent 也就是白色;但如果 barStyle 是 .default ,那么系统栏就也是默认的黑色了。但这种做法,仍然对iOS15高版本没有作用
二、正确做法
步骤一:在你的 Info.plist 里, View controller-based status bar appearance 必须设置为 YES,否则后面的步骤做完了,也是没有效果的
image.png步骤二:全局设置
在您的UINavigationController,或者是基类的UIViewController里面进行全局设置,这样整个项目的状态栏就设置成功了,如下
image.png核心代码如下,里面都有详细的解释,就不赘述了
// 导航条上UIBarButtonItem的颜色
navigationBar.tintColor = .green;
if #available(iOS 14.0, *) {
// 导航条的中间title的颜色字体大小
let appearance = UINavigationBarAppearance()
appearance.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white,NSAttributedString.Key.font: UIFont.systemFont(ofSize: 18.0)]
appearance.configureWithOpaqueBackground()
// 导航条的背景色
appearance.backgroundColor = .red
UINavigationBar.appearance().standardAppearance = appearance
UINavigationBar.appearance().scrollEdgeAppearance = appearance
// 状态栏的样式(.dark时,🔋电池栏为白色)
UINavigationBar.appearance().overrideUserInterfaceStyle = .dark
} else {
// 导航条的中间title的颜色字体大小
navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor:UIColor.white,NSAttributedString.Key.font:UIFont.systemFont(ofSize: 18.0)]
// 导航条的背景色
navigationBar.barTintColor = .red
// 状态栏的样式(.black时,🔋电池栏为白色)
// UINavigationBar.appearance().barStyle = .black
navigationBar.barStyle = .black
}
最终效果,如文章开篇那样,状态栏,电池栏都是白色,
步骤三:设置单个页面的状态(为可选步骤,根据需求来决定)
效果如下:
status_bar.gif代码:
if #available(iOS 14.0, *) {
// 状态栏的样式(.dark时,🔋电池栏为白色)
self.navigationController?.navigationBar.overrideUserInterfaceStyle = .light
} else {
// 状态栏的样式(.black时,🔋电池栏为白色)
self.navigationController?.navigationBar.barStyle = .default
}
image.png
结尾
今天的分享至此接近尾声喽,小伴们,觉得有点用的话,或者已经看到这里面来的请点赞加关注吧~~
后续分享更多iOS原生技术及物联网技术相关文章。如果有任何疑问的话,欢迎在下方留言~
网友评论