美文网首页
iOS 最新iOS15.0,正确设置状态栏(status bar

iOS 最新iOS15.0,正确设置状态栏(status bar

作者: 微风_10a5 | 来源:发表于2022-04-24 18:14 被阅读0次

看完本文,小伙伴们将会学会在不同的iOS版本,特别是iOS 15高版本的情况下,如何正确地设置状态栏的样式
最终效果如下

image.png

一 、先说几个能在网上找到的答案,经验证这些方法没有效果的情况

过期方法:由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原生技术及物联网技术相关文章。如果有任何疑问的话,欢迎在下方留言~

相关文章

网友评论

      本文标题:iOS 最新iOS15.0,正确设置状态栏(status bar

      本文链接:https://www.haomeiwen.com/subject/lawcjrtx.html