UIStatusBarStyle не работает в Swift
Я пытаюсь изменить цвет строки состояния в моем приложении Swift на белый, но ударяю по кирпичной стене. У меня есть 3 ViewControllers, каждый из которых встроен в NavigationController (может быть, это проблема? Я уже пытался поместить код в класс NavigationController.) Я пробовал оба следующих фрагмента кода в didFinishLaunchingWithOptions моего AppDelegate.swift файл, но ни один не работал.
application.statusBarStyle = .LightContent
и
UIApplication.sharedApplication().statusBarStyle = .LightContent
все, что есть в документах чтобы сказать об этом, UIBarButtonStyle-это Int и дал мне этот фрагмент перечисления, который совсем не помог мне с имплиментацией.
enum UIStatusBarStyle : Int {
case Default
case LightContent
case BlackOpaque
}
что я упустил?
11 ответов:
у вас есть два варианта.
если вы хотите продолжить вручную устанавливать стиль строки состояния, продолжайте делать то, что вы делаете, но вам нужно будет добавить следующий ключ к вашей информации.plist файл со значением
NO.внешний вид строки состояния на основе контроллера
или, если вы хотите продолжать использовать внешний вид строки состояния на основе контроллера вида, вместо установки стиля statusBarStyle приложения, переопределите
preferredStatusBarStyleсвойство в каждом контроллере вида, для которого вы хотите указать стиль строки состояния.Swift 3
override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }Swift 2
override func preferredStatusBarStyle() -> UIStatusBarStyle { return UIStatusBarStyle.LightContent }
Swift 3.0
в AppDelegate.swift didFinishLaunchingWithOptions
UIApplication.shared.statusBarStyle = .lightContentинформация.файл plist
View controller-based status bar appearance -> NOSwift 2.2
в AppDelegate.swift didFinishLaunchingWithOptions
UIApplication.sharedApplication().statusBarStyle = .LightContentинформация.файл plist
View controller-based status bar appearance -> NO
для 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от информация.plist, чтобы подавить предупреждения, которые вы, вероятно, тоже видите!)
в Swift 3 стиль строки состояния изменился на вычисляемое свойство в UIViewController, которое можно переопределить следующим образом:
override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent //or default }
на iOS 9 следующее (setStatusBarStyle) устарело, и вы получите предупреждение, если пойдете этим путем.
UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)Если вы хотите, чтобы все статусные панели были изменены одним выстрелом, попробуйте добавить следующее к своей информации.файл plist. Это также сделает вашу строку состояния экрана запуска белой. В то время как код выше не будет.
<key>UIStatusBarStyle</key> <string>UIStatusBarStyleLightContent</string> <key>UIViewControllerBasedStatusBarAppearance</key> <false/>
для меня все выше динд не работает, пока я не добавлю:
self.navigationController?.navigationBar.barStyle = .black;так:
- Set
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 }
и черный содержимое использовать по умолчаниюи если это не сработает, вы можете попробовать добавить
UINavigationControllerextension:extension UINavigationController { override open var preferredStatusBarStyle: UIStatusBarStyle { if let lastVC = self.viewControllers.last { return lastVC.preferredStatusBarStyle } return .default } }
странно, используя Swift 3.1 & XC8.2.1, но все вышеперечисленное не сработало.
что я сделал, это просто
extension UINavigationController { override open var preferredStatusBarStyle: UIStatusBarStyle { get { return .lightContent } } }нет Plist, никаких других вещей. ХТ
в Swift 3.0 вы можете переопределить геттер в ViewController для отображения строки состояния на основе контроллера вида:
override var preferredStatusBarStyle: UIStatusBarStyle { get { return .lightContent } }
не редактируйте свою информацию.файл plist. Добавьте это в свой ViewController.Свифт:
override func preferredStatusBarStyle() -> UIStatusBarStyle { return UIStatusBarStyle.LightContent }
Шаг 1. Добавить к информации.файл plist
View controller-based status bar appearance -> NOШаг 2. Добавьте код в метод, где вам нужно изменить цвет строки состояния:
UIApplication.shared.statusBarStyle = .lightContent //(or .default) setNeedsStatusBarAppearanceUpdate()ключевая строка кода:
setNeedsStatusBarAppearanceUpdate()
Comments