UIStatusBarStyle 不会改变

Bol*_*ion 2 uistatusbar swift

我正在开发一个 swift 应用程序,我想UIStatusBarStyle根据应用程序的主题进行更改(有 2 个选项 - 浅色和深色主题)。我已View controller-based status bar appearanceNOinfo.plist,并在UIViewController我试图根据当前的主题,像这样进行设置:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return Theme.current.statusBarStyle
}


protocol ThemeProtocol { 
    // Status Bar
    var statusBarStyle: UIStatusBarStyle { get } 
}

class Theme {
    static var current: ThemeProtocol = LightTheme()
}

class LightTheme: ThemeProtocol {
    // Status Bar 
    var statusBarStyle: UIStatusBarStyle = .default

}

class DarkTheme: ThemeProtocol {
    // Status Bar 
    var statusBarStyle: UIStatusBarStyle = .lightContent

}
Run Code Online (Sandbox Code Playgroud)

真的没有结果。我试图通过仅返回来测试它:return .lightContent但这也没有改变状态栏。

我究竟做错了什么?

更新:

好的,这就是我正在尝试做的,但它不起作用。

    fileprivate func applyTheme() {

    statusBarStyle = UserDefaults.standard.bool(forKey: SelectedThemeKey) ? .default : .lightContent
    self.setNeedsStatusBarAppearanceUpdate()

}

override var preferredStatusBarStyle: UIStatusBarStyle {
    return statusBarStyle
}
Run Code Online (Sandbox Code Playgroud)

它不起作用。尽管更改了主题,但状态栏始终保持默认样式。applyTheme()被调用viewDidLoad()并且viewWillAppear()

Sh_*_*han 5

您需要在任何更改后调用此方法

setNeedsStatusBarAppearanceUpdate()
Run Code Online (Sandbox Code Playgroud)

//

class ViewController: UIViewController {

    var current = UIStatusBarStyle.default

    @IBAction func changeClicked(_ sender: Any) {
        current = current == .default ? .lightContent : .default
        self.setNeedsStatusBarAppearanceUpdate()
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }
    override  var preferredStatusBarStyle: UIStatusBarStyle {
        return current
    }

}
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明