UIStatusBarStyle не работает в Swift

ios swift appdelegate uistatusbar xcode6

56853 просмотра

11 ответа

Я пытаюсь изменить цвет строки состояния в приложении Swift на белый, но у меня кирпичная стена. У меня есть 3 ViewController, каждый из которых встроен в NavigationController (может ли это быть проблемой? Я уже пытался поместить код в класс NavigationController.) Я пробовал оба из следующих фрагментов кода в didFinishLaunchingWithOptions моего AppDelegate .swift файл, но ни один не работал.

application.statusBarStyle = .LightContent

а также

UIApplication.sharedApplication().statusBarStyle = .LightContent

Все, что Документы должны сказать об этом, это то, что UIBarButtonStyle является Int и дал мне этот фрагмент enum, который не помог мне с имплиментацией.

enum UIStatusBarStyle : Int {
    case Default
    case LightContent
    case BlackOpaque
}

Что мне не хватает?

Автор: davidrayowens Источник Размещён: 12.11.2019 09:14

Ответы (11)


144 плюса

Решение

У вас есть два варианта.

Если вы хотите продолжить настройку стиля строки состояния вручную, продолжайте делать то, что вы делаете, но вам нужно добавить следующий ключ в ваш файл info.plist со значением NO.

Просмотр внешнего вида строки состояния на основе контроллера

Или, если вы хотите продолжать использовать внешний вид строки состояния на основе контроллера представления, вместо установки statusBarStyle приложения, переопределите preferredStatusBarStyleсвойство в каждом контроллере представления, для которого вы хотите указать стиль строки состояния.

Свифт 3

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

Swift 2

override func preferredStatusBarStyle() -> UIStatusBarStyle {
    return UIStatusBarStyle.LightContent
}
Автор: Mick MacCallum Размещён: 16.06.2014 01:26

143 плюса

Swift 3.0

в AppDelegate.swift didFinishLaunchingWithOptions

UIApplication.shared.statusBarStyle = .lightContent

Info.plist

View controller-based status bar appearance -> NO

Swift 2.2

в AppDelegate.swift didFinishLaunchingWithOptions

UIApplication.sharedApplication().statusBarStyle = .LightContent

Info.plist

View controller-based status bar appearance -> NO
Автор: Maselko Размещён: 01.02.2016 01:28

33 плюса

Вы должны установить:

navigationController.navigationBar.barStyle = .black

и текст появится в белом

Автор: Nico S. Размещён: 25.09.2015 09:44

21 плюса

Для 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, чтобы скрыть предупреждения, которые вы, вероятно, тоже видите!)

Автор: Biodave Размещён: 28.09.2015 03:47

15 плюса

В Swift 3 стиль строки состояния изменился на вычисляемое свойство в UIViewController, которое вы можете переопределить следующим образом:

override var preferredStatusBarStyle: UIStatusBarStyle {
   return .lightContent //or default
} 
Автор: Eric Welander Размещён: 17.09.2016 03:44

12 плюса

На iOS 9 следующее (setStatusBarStyle) устарело, и вы получите предупреждение, если вы пойдете этим путем.

UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)

Если вы хотите, чтобы все статус-бары были изменены за один раз, попробуйте добавить следующее в ваш Info.plist. Это также сделает вашу строку состояния экрана запуска белым. Пока код выше не будет.

<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleLightContent</string>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
Автор: GuiSoySauce Размещён: 10.02.2016 08:22

9 плюса

для меня все выше не работает, пока я не добавлю:

self.navigationController?.navigationBar.barStyle = .black;

так:

  1. Набор UIViewControllerBasedStatusBarAppearanceдля YESв.plist
  2. В viewDidLoadвызовеself.setNeedsStatusBarAppearanceUpdate();
  3. Переопределить предпочитаемыйStatusBarStyle
    override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }
  4. В переопределенном методе я также установил navigationBar.barStyleокончательный вариант
    для светлого контента:
    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
    }
}
Автор: Constantin Saulenco Размещён: 21.10.2016 08:13

6 плюса

Странно, используя Swift 3.1 и XC8.2.1, но все вышеперечисленное не сработало.

То, что я сделал, это просто

extension UINavigationController
{
    override open var preferredStatusBarStyle: UIStatusBarStyle {
        get {
            return .lightContent
        }
    }
}

Нет Плиста, нет других вещей. НТН

Автор: Lord iPhonius Размещён: 16.03.2017 12:22

2 плюса

В Swift 3.0 вы можете переопределить метод получения в ViewController для отображения строки состояния View на основе контроллера:

override var preferredStatusBarStyle: UIStatusBarStyle {
    get { return .lightContent }
}
Автор: Denis Kreshikhin Размещён: 09.03.2017 06:35

1 плюс

Не редактируйте ваш Info.plist. Добавьте это к вашему ViewController.swift:

override func preferredStatusBarStyle() -> UIStatusBarStyle {
    return UIStatusBarStyle.LightContent
}
Автор: Sev Размещён: 15.02.2016 06:59

1 плюс

Шаг 1. Добавить в info.plist View controller-based status bar appearance -> NO

Шаг 2. Добавьте код в метод, где вам нужно изменить цвет строки состояния:

UIApplication.shared.statusBarStyle = .lightContent //(or .default)
setNeedsStatusBarAppearanceUpdate()

Ключевая строка кода: setNeedsStatusBarAppearanceUpdate()

Автор: Igor Размещён: 29.11.2017 03:05
Вопросы из категории :
32x32