【问题标题】:UINavigation Status bar color change in swift iOS [duplicate]swift iOS中的UINavigation状态栏颜色变化[重复]
【发布时间】:2019-08-08 11:06:10
【问题描述】:

我的一个控制器的导航状态栏颜色为黑色,我想将其设为白色。我怎样才能改变它?

【问题讨论】:

    标签: ios swift uinavigationbar uinavigationcontroller


    【解决方案1】:

    正如一些人已经建议的那样,在您的 viewController 集中:

    override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }
    

    但是,这还不够。由于该 viewController 包含在 UINavigationController 中,因此您需要告诉导航控制器使用基于当前显示控制器的状态栏样式。一种方法是像这样扩展 UINavigationController:

    extension UINavigationController {
        open override var preferredStatusBarStyle: UIStatusBarStyle {
            return topViewController?.preferredStatusBarStyle ?? .default
        }
    }
    

    【讨论】:

      【解决方案2】:

      preferredStatusBarStyle 属性设置为 lightContent。 Build and Run 项目,看到状态栏的内容变亮了。

      override var preferredStatusBarStyle: UIStatusBarStyle {     
            return .lightContent
      }
      

      状态栏的内容又变暗了,这是默认的。原因是,iOS 要求导航控制器的状态栏样式,而不是包含的视图控制器。

      • 要将导航控制器的样式更改为应用程序内部的灯光,请添加以下 viewDidAppear(_:) 方法
      override func viewDidAppear(_ animated: Bool) {
          navigationController?.navigationBar.barStyle = .black
      }
      

      【讨论】:

        【解决方案3】:

        将 viewWillAppear 添加到您的代码中

        override func viewWillAppear(_ animated: Bool) {
            super.viewWillAppear(animated)
            let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
            if statusBar.responds(to:#selector(setter: UIView.backgroundColor)) {
                statusBar.backgroundColor = UIColor.white
            }
            let img = UIImage()
            navigationController?.navigationBar.shadowImage = img
            navigationController?.navigationBar.setBackgroundImage(img, for: UIBarMetrics.default)
            navigationController?.navigationBar.backgroundColor =  UIColor.white
            navigationController?.navigationBar.barTintColor = UIColor.white
        }
        

        【讨论】:

          【解决方案4】:

          默认情况下,我们可以在项目 plist 中设置状态栏样式,但是如果您想为特定控制器定义颜色,那么我们应该在您的控制器类中覆盖以下方法。

          override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }

          希望对你有帮助:)

          【讨论】:

            【解决方案5】:

            在你的 ViewController 中调用它:

            override var preferredStatusBarStyle: UIStatusBarStyle {
                return .lightContent
            }
            

            为 Swift 5 更新:

            override var preferredStatusBarStyle: UIStatusBarStyle {
                .lightContent
            }
            

            另外,如果您还没有这样做,您应该将 info.plist 文件中的 View controller-based status bar appearance 属性设置为 YES

            【讨论】:

              猜你喜欢
              • 2014-06-23
              • 2013-10-04
              • 2020-01-16
              • 2016-11-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-12-31
              相关资源
              最近更新 更多