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
UIViewControllerBasedStatusBarAppearance
toYES
на.plist
- на
viewDidLoad
вызовself.setNeedsStatusBarAppearanceUpdate();
- переопределить preferredStatusBarStyle
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 }
}
не редактируйте информацию.файл 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()