Как изменить стиль строки состояния - iOS 12 - PullRequest
0 голосов
/ 08 сентября 2018

Мне нужно обновить стиль строки состояния на каждом контроллере представления на основании цвета фона (что UINavigationController делает автоматически).

Перепробовал все опции, описанные в stackoverflow (View controller-based status bar appearance в info.plist, установленном на ДА ), но ни один не помог мне.

Я использую Xcode 10 beta 6 и Swift 4.2 для iOS 12.

Ответы [ 5 ]

0 голосов
/ 13 августа 2019

Наконец то, что сработало для меня:

Добавить в Info.plist:

View controller-based status bar appearance : YES

Для каждого ViewController добавьте в viewDidLoad () и viewDidAppear ():

self.setNeedsStatusBarAppearanceUpdate()

a) Для строки состояния темного цвета добавьте в ViewController:

    override var preferredStatusBarStyle: UIStatusBarStyle {
    return .default
}

b) Для строки состояния белого цвета добавьте в ViewController:

    override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}
0 голосов
/ 12 апреля 2019

У меня есть Xcode 10.2, и я обнаружил, что, если вы это сделали, установка внешнего вида строки состояния на основе контроллера в info.plist на «YES» не изменит стиль строки состояния вообще.

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

Вот что я сделал, чтобы исправить это для себя
При наведении курсора на верхнюю строку «Список свойств информации» из файла info.plist появится небольшая круглая кнопка «+». Нажмите эту кнопку и пролистайте пункты, пока не найдете следующие клавиши.

Просмотр внешнего вида строки состояния на основе контроллера [установить это значение] NO
Стиль строки состояния [установить это значение] UIStatusBarStyleLightContent

ПРИМЕЧАНИЕ: UIStatusBarStyleLightContent не найден как выбираемый элемент в списке значений и должен быть введен в поле значения.

info.plist

Надеюсь, это поможет вам или кому-либо еще, ищущему ответ на этот вопрос.

0 голосов
/ 21 сентября 2018

Swift 4.2, iOS 12

View controller-based status bar appearance теперь необходимо установить на YES в info.plist, поскольку UIKit больше не хочет, чтобы мы редактировали стиль строки состояния с помощью UIApplication.shared - стиль строки состояния теперь основан на контроллере представления.

Затем, если вы хотите, чтобы изменение было применено на уровне приложения, просто переопределите preferredStatusBarStyle в соответствующем контроллере представления контейнера (в идеале - корне) ...

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

... и это будет распространяться на все контроллеры представления. И если вы хотите редактировать стиль строки состояния для каждого контроллера представления, примените это переопределение для каждого контроллера представления.

Если стиль строки состояния когда-либо изменяется во время выполнения, вам нужно вызвать setNeedsStatusBarAppearanceUpdate() (из любого места в контейнере / корневом контроллере представления или в этом конкретном контроллере представления), в противном случае это не требуется.

0 голосов
/ 22 октября 2018

Если для View controller-based status bar appearance в info.plist установлено значение ДА , а ваш контроллер вида встроен в UINavigationController, то ваш контроллер навигации будет отвечать за обновление стиля панели (через navigationController.navigationBar.barStyle) и preferredStatusBarStyle свойство будет игнорироваться

0 голосов
/ 08 сентября 2018

Установите View controller-based status bar appearance на NO в info.plist и переопределите preferredStatusBarStyle в каждом контроллере вида следующим образом:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

И вызовите setNeedsStatusBarAppearanceUpdate() в вашем контроллере представления (например, в viewDidLoad()).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...