Изменение стиля выбора изображения Предпочтительный стиль строки состояния Swift - PullRequest
0 голосов
/ 06 апреля 2019

стиль строки состояния для моего приложения белый, кроме случаев, когда представлен контроллер средства выбора изображений, и я уже расширил свой UINavigationController, но, похоже, он не работает ни с одним представлением, присутствующим только на выдвинутых представлениях. У кого-нибудь есть решение?

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

Я также попробовал этот метод, но навигационный контроллер - это пусть и preferredStatusBarStyle только для чтения

   func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
        viewController.navigationItem.title = "willShow"
        navigationController.preferredStatusBarStyle = UIStatusBarStyle.lightContent
    }

1 Ответ

1 голос
/ 06 апреля 2019

Когда вы представляете что-то модально и хотите, чтобы оно определяло стиль строки состояния, вам нужно установить modalPresentationCapturesStatusBarAppearance = true

Например:

let navigationController = UINavigationController(rootViewController: MyViewController())
navigationController.modalPresentationCapturesStatusBarAppearance = true
present(navigationController, animated: true)

Вам также необходимо проверить, является ли текущий UINavigationController значением UIImagePickerController и вернуть .lightContent из preferredStatusBarStyle, поскольку UIImagePickerController имеет предпочтения .default из коробки.

open override var preferredStatusBarStyle: UIStatusBarStyle {
    if self is UIImagePickerController {
        return .lightContent
    }
    return topViewController?.preferredStatusBarStyle ?? .lightContent
}
...