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
}


что я упустил?

574   11  

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;

так:

  1. Set UIViewControllerBasedStatusBarAppearance до YES на .plist
  2. на viewDidLoad вызов self.setNeedsStatusBarAppearanceUpdate();
  3. переопределить preferredStatusBarStyle
    override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }
  4. в переопределенном методе я установил также 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

    Ничего не найдено.