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 -> NO
Swift 2.2
в AppDelegate.swift didFinishLaunchingWithOptions
UIApplication.sharedApplication().statusBarStyle = .LightContent
информация.файл plist
View controller-based status bar appearance -> NO
вы должны установить:
navigationController.navigationBar.barStyle = .black
и текст будет отображаться в белый
для 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
UIViewControllerBasedStatusBarAppearancetoYESна.plist - на
viewDidLoadвызовself.setNeedsStatusBarAppearanceUpdate(); - переопределить preferredStatusBarStyle
override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent } - в способ перекрытая я тоже
navigationBar.barStyleso 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 }
}
не редактируйте информацию.файл plist. Добавьте это в свой ViewController.Свифт:
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()