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