NavigationController Переход от прозрачной к непрозрачной панели навигации - PullRequest
1 голос
/ 10 марта 2019

В настоящее время я пытаюсь добавить переход, который эквивалентен текущей реализации в приложениях, таких как Tripadvisor, Airbnb и co.Я говорю о переходе от прозрачной навигационной панели к цветной навигационной панели и обратно.

Итак, сначала я реализовал два метода.makeNavBarVisible & makeNavBarTransparent Реализация должна быть простой для понимания.

public func makeNavBarTransparent() {
    navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
    navigationController?.navigationBar.shadowImage = UIImage()
}

public func makeNavBarVisible() {
    navigationController?.navigationBar.setBackgroundImage(nil, for: .default)
    navigationController?.navigationBar.shadowImage = nil
}

Это работает как шарм.Тогда я подумал о лучшем способе оживить переход.Поэтому я посмотрел документы UIKit и обнаружил, что теперь для каждого перехода есть один координатор, который можно использовать для анимации.Поэтому я настроил координатор в viewDidLoad, и он заработал.

override func viewDidLoad() {
     super.viewDidLoad()
     transitionCoordinator?.animate(alongsideTransition: { context in
          self.makeNavBarTransparent()
     })
}

Затем я также добавил блок анимации в координатор для обратного перехода.

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    transitionCoordinator?.animate(alongsideTransition: { context in
       self.makeNavBarVisible()
    })
}

И сейчас возникает проблема, для которой я пока не могу найти простого чистого решения.Когда я использую интерактивные жесты, переход выглядит корректно.Но если я нажимаю кнопку «Назад», анимация кажется неисправной.Почему координатор работает при использовании жеста, а не при нажатии кнопки «назад».Это похоже на ошибку для меня.У кого-нибудь есть такая же проблема, как у вас, и если да, то как ее избежать?

enter image description here

...