В настоящее время я пытаюсь добавить переход, который эквивалентен текущей реализации в приложениях, таких как 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()
})
}
И сейчас возникает проблема, для которой я пока не могу найти простого чистого решения.Когда я использую интерактивные жесты, переход выглядит корректно.Но если я нажимаю кнопку «Назад», анимация кажется неисправной.Почему координатор работает при использовании жеста, а не при нажатии кнопки «назад».Это похоже на ошибку для меня.У кого-нибудь есть такая же проблема, как у вас, и если да, то как ее избежать?