美文网首页
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