Цвет строки состояния не является глобальным (по умолчанию), и если вы установите значение не ViewControllerBased
, вы больше не сможете его изменить. Таким образом, вам нужно изменить его в любом представлении, которое вам нужно, например:
var statusBarStyle = UIStatusBarStyle.default { didSet { setNeedsStatusBarAppearanceUpdate() } }
override var preferredStatusBarStyle: UIStatusBarStyle { statusBarStyle }
. Эти две переменные помогут вам изменить строку состояния. Обратите внимание, что вы можете вызвать setNeedsStatusBarAppearanceUpdate
внутри блока анимации, чтобы сделать его анимируемым.
, чтобы определить, когда UserInterfaceStyle
изменяется (и соответственно обновлять цвет statusBar), все виды и viewControllers имеют функцию делегата для этого. Итак, зная, что:
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
if traitCollection.hasDifferentColorAppearance(comparedTo: previousTraitCollection) {
updateStatusBarColor()
}
}
И это функция :
func updateStatusBarColor() {
switch traitCollection.userInterfaceStyle {
case .unspecified: statusBarStyle = .default
case .light: statusBarStyle = .darkContent
case .dark: statusBarStyle = .lightContent
}
}
Обратите внимание, что:
ParentViewController определяет statusBarColor
,Поэтому, если вы используете общие navigationController
или tabBarController
, для них должно быть достаточно пользовательского класса с этими кодами.