UIStatusBarStyle не работает в Swift
Я пытаюсь изменить цвет строки состояния в моем приложении Swift на белый, но я ударяю о кирпичную стену. У меня есть 3 ViewControllers, каждый из которых встроен в NavigationController (может быть, это проблема? Я уже пытался поместить код в класс NavigationController.) Я пробовал использовать оба следующих фрагмента кода в файле didFinishLaunchingWithOptions моего AppDelegate.swift, но не работал.
application.statusBarStyle = .LightContent
и
UIApplication.sharedApplication().statusBarStyle = .LightContent
Все, что Docs должны сказать об этом, это то, что UIBarButtonStyle - это Int и дал мне этот фрагмент enum, который не помог мне вообще с имплиментацией.
enum UIStatusBarStyle : Int {
case Default
case LightContent
case BlackOpaque
}
Что мне не хватает?
Ответы
Ответ 1
У вас есть два варианта.
Если вы хотите продолжить вручную настраивать стиль строки состояния, продолжайте делать то, что вы делаете, но вам нужно добавить следующий ключ в ваш файл info.plist со значением NO
.
Просмотр состояния строки состояния на основе контроллера
Или, если вы хотите продолжать использовать внешний вид строки состояния на основе контроллера, вместо того, чтобы устанавливать статус приложенияBarStyle, переопределите свойство preferredStatusBarStyle
в каждом контроллере представления, для которого вы хотите указать стиль строки состояния.
Swift 3
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
Swift 2
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return UIStatusBarStyle.LightContent
}
Ответ 2
Swift 3.0
в AppDelegate.swift didFinishLaunchingWithOptions
UIApplication.shared.statusBarStyle = .lightContent
Info.plist
View controller-based status bar appearance -> NO
Swift 2.2
в AppDelegate.swift didFinishLaunchingWithOptions
UIApplication.sharedApplication().statusBarStyle = .LightContent
Info.plist
View controller-based status bar appearance -> NO
Ответ 3
Вы должны установить:
navigationController.navigationBar.barStyle = .black
и текст появится в белом
Ответ 4
Для iOS9.x и Xcode7 просто поместите это внутри AppDelegate.swift
:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
UINavigationBar.appearance().barStyle = .Black
}
Это автоматически превратит ваш стиль строки состояния в .Lightcontent
для всех контроллеров представления внутри UINavigationController.
(Кроме того, удалите View controller-based status bar appearance
из Info.plist, чтобы подавить предупреждения, которые вы, вероятно, тоже видите!)
Ответ 5
В Swift 3 стиль строки состояния изменился на вычисленное свойство в UIViewController, которое вы можете переопределить следующим образом:
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent //or default
}
Ответ 6
В iOS 9 следующий (setStatusBarStyle) устарел, и вы получите предупреждение, если вы пойдете таким образом.
UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)
Если вы хотите, чтобы все статусные бары были изменены одним выстрелом, попробуйте добавить в свой Info.plist следующее. Это также сделает вашу панель состояния экрана запуска белой. Хотя код выше не будет.
<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleLightContent</string>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
Ответ 7
для меня все выше dind't работать, пока я не добавлю:
self.navigationController?.navigationBar.barStyle = .black;
так:
- Установите
UIViewControllerBasedStatusBarAppearance
в YES
в .plist
- В
viewDidLoad
вызов self.setNeedsStatusBarAppearanceUpdate();
- Переопределить preferredStatusBarStyle
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
- В переопределенном методе я также устанавливаю
navigationBar.barStyle
так окончательно
свет:
override var preferredStatusBarStyle: UIStatusBarStyle {
self.navigationController?.navigationBar.barStyle = .black;//or default
return .lightContent //or default
}
и для черного контента используют по умолчанию
Источник здесь и здесь.
и если это не сработает, вы можете попробовать добавить UINavigationController
extension
:
extension UINavigationController
{
override open var preferredStatusBarStyle: UIStatusBarStyle {
if let lastVC = self.viewControllers.last
{
return lastVC.preferredStatusBarStyle
}
return .default
}
}
Ответ 8
Странно, используя Swift 3.1 и XC8.2.1, но все вышеперечисленное не работает.
Что я сделал, просто
extension UINavigationController
{
override open var preferredStatusBarStyle: UIStatusBarStyle {
get {
return .lightContent
}
}
}
Нет Plist, никаких других вещей.
НТН
Ответ 9
Не изменяйте свой Info.plist. Добавьте это в свой ViewController.swift:
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return UIStatusBarStyle.LightContent
}
Ответ 10
В Swift 3.0 вы можете переопределить getter в ViewController for View на панели состояния на основе контроллера:
override var preferredStatusBarStyle: UIStatusBarStyle {
get { return .lightContent }
}
Ответ 11
Шаг 1. Добавьте к info.plist View controller-based status bar appearance -> NO
Шаг 2. Добавьте код в метод, где вам нужно изменить цвет строки состояния:
UIApplication.shared.statusBarStyle = .lightContent //(or .default)
setNeedsStatusBarAppearanceUpdate()
Ключевая строка кода: setNeedsStatusBarAppearanceUpdate()