Change status bar color dynamically in Swift 4

后端 未结 3 1107
天命终不由人
天命终不由人 2021-01-31 22:11

I would like to change the status bar color between .lightContent and .default dynamically (since my background can change in the same ViewController).

3条回答
  •  佛祖请我去吃肉
    2021-01-31 22:35

    Override preferredStatusBarStyle and call setNeedsStatusBarAppearanceUpdate() when it needs an update. In my example I used a simple dark mode controlled by a boolean property useDarkMode. As soon as it gets changed the UI is updated (including the status bar):

    var useDarkMode = false {
        didSet {
            if useDarkMode != oldValue {
                updateUI()
            }
        }
    }
    
    private func updateUI() {
        UIView.animate(withDuration: 0.25) {
            if self.useDarkMode {
                self.view.backgroundColor = .darkGray
                self.view.tintColor = .white
            } else {
                self.view.backgroundColor = .white
                self.view.tintColor = nil
            }
    
            self.setNeedsStatusBarAppearanceUpdate()
        }
    }
    
    override var preferredStatusBarStyle: UIStatusBarStyle {
        return useDarkMode ? .lightContent : .default
    }
    

提交回复
热议问题