Предпочтительный стиль строки состояния контроллера представления игнорируется, когда в контроллере навигации

Я пишу приложение для iOS с несколькими представлениями. Я настроил приложение на использование стиля строки состояния на основе ViewController, что позволяет мне использовать следующий код

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
} 

Это сработало, как и ожидалось.

Но затем я встроил представления в контроллер навигации и соединил BarButtonItem с showSegue. С тех пор ViewController вида, переключенного на, игнорирует настройки стиля и показывает черную строку состояния по умолчанию.

Ответ 1

Когда вы находитесь в контроллере навигации, который не будет вызван. Будет вызываться контроллер навигации preferredStatusBarStyle. Попробуйте это вместе с кодом:

extension UINavigationController {

   open override var preferredStatusBarStyle: UIStatusBarStyle {
      return topViewController?.preferredStatusBarStyle ?? .default
   }
}

Ответ 2

Существует решение, которое является более кратким (и рекомендованным Apple):

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