Как добавить наблюдателя, чтобы найти панель навигации, показать и скрыть - PullRequest
0 голосов
/ 10 мая 2019

У меня есть MapViewController, встроенный в UINavigationController.Я нажимаю на несколько контроллеров представления с этого контроллера представления, открываю MapViewController с этих контроллеров представления.

В MapViewController У меня есть карта Google, ее верхняя позиция начинается с safeAreaLayoutGuide.Я скрываю и показываю навигационный контроллер на основе нескольких условий.Например, когда я показываю subview1, я скрываю панель навигации, когда я показываю subview2, я показываю панель навигации и т. Д. *

Теперь я хочу изменить верхнюю позицию карты, когда меняется видимость панели навигации.

Как решить эту проблему?

  • Я проверил UINavigationControllerDelegate .При отображении / скрытии панели навигации не вызывается метод делегата, где я могу обновить верхнюю позицию вида карты.
  • viewDidLayoutSubviews не вызывается при изменении видимости панели навигации.Я хочу сделать это только в MapViewController.Не в контроллере с задним видом из этого.

1 Ответ

0 голосов
/ 10 мая 2019

Вы можете добавить наблюдателя свойства к isHidden свойству navigationBar и затем наблюдать за любыми внесенными изменениями, т.е.

var observer: NSKeyValueObservation?

override func viewDidLoad() {
    super.viewDidLoad()
    self.observer = self.navigationController?.navigationBar.observe(\.isHidden, options: [.new], changeHandler: { (navigationBar, changes) in
        if let newValue = changes.newValue {
            print(newValue)
            topConstraint.constant = newValue ? 0 : self.view.safeAreaInsets.top
        }
    })
}

Когда в свойство isHidden в navigationBar вносятся какие-либо изменения, мы получим обратный вызов в замыкании и будем действовать соответственно.

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