Я работаю над быстрым приложением и хочу изменить UIStatusBarStyle
в соответствии с темой приложения (есть 2 варианта - светлая и темная тема). Я установил View controller-based status bar appearance
на NO
в info.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
}
Никакого результата на самом деле. Я попытался проверить это, вернув только: return .lightContent
, но это также не изменило строку состояния.
Что я делаю не так?
ОБНОВЛЕНИЕ:
Итак, это то, что я пытаюсь сделать, и это не работает.
fileprivate func applyTheme() {
statusBarStyle = UserDefaults.standard.bool(forKey: SelectedThemeKey) ? .default : .lightContent
self.setNeedsStatusBarAppearanceUpdate()
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return statusBarStyle
}
И это не работает. Несмотря на изменение темы, строка состояния всегда остается в стиле по умолчанию. applyTheme()
вызывается в viewDidLoad()
и viewWillAppear()