快速浏览iOS中的UINavigation状态栏颜色更改

时间:2019-08-08 11:06:10

标签: ios swift uinavigationbar uinavigationcontroller

我的一个控制器的导航状态栏颜色为黑色,我想将其设置为白色。我该如何更改? enter image description here

5 个答案:

答案 0 :(得分:1)

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

override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }

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

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

答案 1 :(得分:0)

preferredStatusBarStyle属性设置为lightContent。生成并运行项目,以查看状态栏的内容变为浅色。

override var preferredStatusBarStyle: UIStatusBarStyle {     
      return .lightContent
}

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

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

答案 2 :(得分:0)

将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
}

答案 3 :(得分:-1)

在您的ViewController中调用它:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

此外,如果尚未完成,则应将info.plist文件中的基于控制器的视图状态栏外观属性设置为

答案 4 :(得分:-1)

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

override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }

希望它会对您有所帮助:)