在Swift 4中动态更改状态栏颜色

Gio*_*usa 7 ios swift

我想改变状态栏的颜色之间.lightContent.default动态(因为我的背景可以在同一个视图控制器改变).

我试图为此创建一个看起来像这样的函数:

func changeStatusBar(useDefault: Bool) {
    if useDefault {
        var preferredStatusBarStyle: UIStatusBarStyle {
            return .default
        }
    } else {
        var preferredStatusBarStyle: UIStatusBarStyle {
            return .lightContent
        }
    }
    setNeedsStatusBarAppearanceUpdate()
}
Run Code Online (Sandbox Code Playgroud)

但没有运气.我在网上找到的每个指南(或者在Stackoverflow上)都只显示了如何更改statusBar,而不是通过函数打开和关闭.

我也设置View controller-based status bar appearanceNO了在info.plist文件中.

我以前使用的UIApplication.shared.statusBarStyle = .lightContent那条线是- 但是因为自iOS9以来不推荐使用它,所以我再也不能使用它了.

任何人都知道如何动态更改它?

Raj*_*r R 22

创建一个类型为UIStatusBarStyle的全局变量并将其返回 UIStatusBarStyle

您可以随时根据需要更改其值 preferredStatusBarStyle

class ViewController: UIViewController {

    override var preferredStatusBarStyle: UIStatusBarStyle {
        return self.style
    }
    var style:UIStatusBarStyle = .default

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func changeStyle(_ sender: UIButton) {
        if self.style == .lightContent {
            self.style = .default
        } else {
            self.style = .lightContent
        }
        setNeedsStatusBarAppearanceUpdate()
    }
}
Run Code Online (Sandbox Code Playgroud)
override var preferredStatusBarStyle: UIStatusBarStyle { return self.style }
Run Code Online (Sandbox Code Playgroud)

如果已将视图控制器嵌入导航控制器,则不会调用您应该更改导航控制器的条形样式

self.navigationController?.navigationBar.barStyle = //newStyle
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


小智 5

我希望下面的代码将用于您的需要(对于 Swift4):

override func viewDidLoad() {
    super.viewDidLoad()

    let statusBar = UIApplication.shared.value(forKey: "statusBar") as? UIView
    if statusBar?.responds(to: #selector(setter: UIView.backgroundColor)) ?? false {
        statusBar?.backgroundColor = .green
    }
}
Run Code Online (Sandbox Code Playgroud)

或者,你可以试试这个:

   if let StatusbarView = UIApplication.shared.value(forKey: "statusBar") as? UIView {
                StatusbarView.backgroundColor = .green
   }
Run Code Online (Sandbox Code Playgroud)