Как изменить стиль строки состояния при загрузке контроллера представления? - PullRequest
0 голосов
/ 19 сентября 2018

Я могу скрыть строку состояния на экране запуска, установив Status bar is initially hidden в YES в Info.plist, а затем я хочу показать ее на моем первом контроллере представления в стиле .lightContent.

Однако UIApplication.shared.statusBarStyle = .lightContent устарела, поскольку iOS 9 (поэтому я не хочу его использовать) и использование следующего кода дают мне черную строку состояния на моем первом контроллере представления.

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

Как я могу изменить стиль строки состояния при загрузке моего первого контроллера просмотра?

Я пытаюсь найти глобальное решение, подобное UIApplication.shared.statusBarStyle = .lightContent, так как я не хочу устанавливатьстиль строки состояния для каждого контроллера представления.Я проверил решения с View controller-based status bar appearance, установленным на YES и NO.

1 Ответ

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

Проблема, с которой вы столкнулись, заключается в том, что UINavigationController не откладывает выбор строки состояния для своих контроллеров представления.

Вместо этого для контроллера навигации - строка состояниястиль может быть установлен путем настройки свойства barStyle его navigationBar.

Если для него задан черный стиль, строка состояния будет иметь стиль light:

navigationController?.navigationBar.barStyle = .black

Обратите внимание, что это также изменит цвет navigationBar, однако вы все равно можете установить цвет панели на любой, используя barTintColor:

navigationController?.navigationBar.barTintColor = .purple

Если вы хотите сделать глобальное изменение,так что все экземпляры UINavigationController используют один и тот же стиль строки состояния (полезно, если у вас есть несколько вкладок, все из которых используют контроллер навигации), тогда вы можете добавить расширение на UINavigationController и переопределитьсвойство preferredStatusBarStyle:

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

Последний вариант - отложить выбор до контроллеров представления в стеке контроллера навигации.

Для этого переопределите свойство childViewControllerForStatusBarStyle.вашего расширения контроллера навигации и гамы возвращаем topViewController:

extension UINavigationController {
    open override var childViewControllerForStatusBarStyle: UIViewController? {
        return topViewController
    }
}

В этом случае вам нужно переопределить preferredStatusBarStyle во всех ваших контроллерах представления (не оптимальный подход, но это вариант, если вам нужно этодетальный уровень контроля для каждого дочернего контроллера).

Все эти решения требуют, чтобы для вашего ключа View controller-based status bar appearance в Info.plist было установлено значение YES.

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