Как настроить цвет status bar?
В своем приложении я использую изображение как фон для моего контроллера. Для status bar в настройках проекта поставил: Status Bar Style - Default. Больше ничего для status bar нигде не использую.
Проблема в том, что когда включается темная тема, мой status bar становится белым. А мне нужно чтобы он оставался черным.
При этом я не хочу убирать поддержку темного/светлого режима во всем приложении. Поэтому Appearance Light в Info.plist мне не совсем подойдет.
Обновление:
Если я использую следущий код во ViewController все работает как мне надо:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
setNeedsStatusBarAppearanceUpdate()
}
override var preferredStatusBarStyle: UIStatusBarStyle {
if #available(iOS 13.0, *) {
return .darkContent
} else {
return .default
}
}
Но если я в сториборде добавлю NavigationController и соединю его с ViewController, то этот код перестанет работать и status bar снова станет белым. Как это исправить?
Если я создам класс UINavigationController и использую свой код в нем то status bar станет черным как мне и надо, но если в сториборде у меня NavigationController -> ViewController -> SecondViewController и в SecondViewController я хочу изменить бар на белый, то ничего не получится...
Ответы (1 шт):
UINavigationController - точно такой же контроллер, как и остальные. Сделайте точно так же, как для контроллера с которым все как надо: унаследуйте, переопределите preferredStatusBarStyle и в сториборде задайте этот класс для UINavigationController.
К примеру:
class MyCustomNavigationController: UINavigationController {
override var preferredStatusBarStyle: UIStatusBarStyle {
if #available(iOS 13.0, *) {
return .darkContent
} else {
return .default
}
}
}
Если хотите чтобы все же зависело от текущего контроллера:
class MyCustomNavigationController: UINavigationController {
override var preferredStatusBarStyle: UIStatusBarStyle {
return topViewController?.preferredStatusBarStyle ?? .darkContent
}
}