Как правильно управлять statusBarStyle в Swift?

Я попытался добавить ключ UIViewControllerBasedStatusBarAppearance в значение true внутри файла info.plist, а затем добавил приведенный ниже код внутри класса UINavigationController, который содержит несколько классов UIViewController.

class HomeNavigationController: UINavigationController {

    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }
}

Но это не сработало.

Я также пробовал установить для свойства barStyle navigationBar значение .black, но это тоже не сработало.

Также посмотрел на https://stackoverflow.com/a/58203998/9180494, но это тоже не помогло.

ВНИМАНИЕ: для классов UIViewController, не встроенных ни в один UINavigationController, если я использую вычисленное свойство preferredStatusBarStyle, оно работает.


person Anuranjan Bose    schedule 03.03.2020    source источник


Ответы (2)


Попробуйте в viewDidAppear() из UINavigationController класса:

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    navigationController?.navigationBar.barStyle = .black
}

Также добавьте (в том же классе, что и выше):

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}
person Tom    schedule 03.03.2020

@Anuranjan Bose Попробуйте это на вашем представлении, загрузилось,

override func viewDidLoad() {
    super.viewDidLoad()
    setNeedsStatusBarAppearanceUpdate()
}
person Ram    schedule 03.03.2020