状态栏样式 - Swift 3 - 随时更改

Status Bar Style - Swift 3 - change at any time

我发现很难以编程方式更改状态栏样式。

我了解如何使用(在 ViewController.swift 中)的组合为每个 ViewController 静态设置它:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return UIStatusBarStyle.default
}

和(在info.plist):

View controller-based status bar appearance = YES

...

我想随时更改它!

经过大量挖掘找到了答案!

设置(在info.plist):

View controller-based status bar appearance = NO

并删除(在ViewController.swift):

override var preferredStatusBarStyle: UIStatusBarStyle {
    return UIStatusBarStyle.default
}

...

现在您可以使用(在ViewController.swift):

UIApplication.shared.setStatusBarStyle(UIStatusBarStyle.lightContent, animated: true)

并且,要为每个 ViewController 初始设置样式,请使用 viewDidAppear:

override func viewDidAppear(_ animated: Bool) {
    UIApplication.shared.setStatusBarStyle(UIStatusBarStyle.lightContent, animated: false)
}

swift 3

1.Change in info.plist 行View controller-based status bar appearance 并设置为NO

2.Change 在 appDelegate.swift 在 didFinishLaunchingWithOptions

UIApplication.shared.statusBarStyle = .lightContent

将状态栏样式存储为视图控制器中的 属性:

var statusBarStyle: UIStatusBarStyle = .default

然后在同一个视图控制器中实现preferredStatusBarStyle

override var preferredStatusBarStyle: UIStatusBarStyle {
    return statusBarStyle
}

然后,当您更改 statusBarStyle 时,请务必同时调用 setNeedsStatusBarAppearanceUpdatepreferredStatusBarStyle 方法在视图 appears/disappears 时自动调用,但是如果在视图可见时更改状态栏样式,则必须告诉视图控制器状态栏外观需要更新。

请注意,您仍然需要对 plist 进行更改,如果您的视图控制器位于导航控制器中,您可能需要在那里处理状态栏更改(通过 UINavigationController 子类,对于例如)。

UIApplication.shared.setStatusBarStyle(…) 在 iOS 9.0 中已弃用,所以不要使用它。