it-roy-ru.com

Как изменить стиль строки состояния - iOS 12

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

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

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

8
Tomáš Pánik

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

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

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

15
Carpsen90

Swift 4.2, iOS 12

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

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

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

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

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

18
bsod

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

4
swearwolf