Swift: скрыть строку состояния только на одном дочернем контроллере представления - PullRequest
0 голосов
/ 24 апреля 2019

У меня проблема, когда дело доходит до строки состояния и ее скрытия.

Настройка

У меня есть BaseViewController с выдвижным меню.Этот BaseViewController также является корневым контроллером приложения [как установлено внутри AppDelegate]:

window = UIWindow()
window?.makeKeyAndVisible()
window?.rootViewController = BaseController()

Как только я выбираю пункт меню, BaseViewController заполняется соответствующим ViewController [после того, как я внедряю его в навигациюконтроллер].

Пункт меню A: ViewControllerA

Пункт меню B: ViewControllerB

Пункт меню C: ViewControllerC

Скажите, что я выбираю пункт меню A (в BaseViewController есть следующий код):

let activeVC = UINavigationController(rootViewController: ViewControllerA())
view.addSubview(activeVC.view)
addChild(activeVC)

Когда я выбираю другой пункт меню (скажем, элемент B), ясначала удалите предыдущий активный контроллер вида (в данном случае элемент A), а затем я добавляю ViewControllerB так же, как я делал с ViewControllerA:

Вот как я удаляю предыдущий активный контроллер вида:

activeVC.view.removeFromSuperview()
activeVC.removeFromParent()

Управление строкой состояния в каждом контроллере представления отдельно:

Я установил Вид строки состояния на основе контроллера на ДА в plist управляет внешним видом строки состояния в каждом контроллере представления:

enter image description here

Затем я захожу в ViewController и хочу скрыть статусбар, и я добавляю следующий код:

override var prefersStatusBarHidden: Bool {
    return true
}

Проблема

Если я хочу скрыть строку состояния внутри любого из ViewController A, B или C, я не могу.Переопределение prefersStatusBarHidden и установка его в значение «true» ничего не изменит.

Если я переопределю prefersStatusBarHidden и установите его в значение «true» в BaseViewController, то BaseViewController, а также любой из ViewController A, B иC скрывает строку состояния.

Что я хочу

Я хочу иметь возможность скрыть строку состояния на ViewControllerB, не скрывая ее на остальных.Тоже миллион долларов, но я с этим разберусь!

Заранее спасибо!

1 Ответ

0 голосов
/ 24 апреля 2019

Вам нужно переопределить var childForStatusBarHidden: UIViewController? для BaseController и для UINavigationController. Например:

override var childForStatusBarHidden: UIViewController? {
    return children.first
}

и

extension UINavigationController {

    open override var childForStatusBarHidden: UIViewController? {
        return topViewController
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...