#ios #uinavigationcontroller #uikit #uinavigationbar
#iOS #uinavigationcontroller #uikit #uinavigationbar
Вопрос:
В настоящее время я пытаюсь добавить переход, эквивалентный текущей реализации в таких приложениях, как Tripadvisor, Airbnb и co. Я говорю о переходе с прозрачной панели навигации на цветную панель навигации и обратно.
Итак, сначала я реализовал два метода. makeNavBarVisible
amp; 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()
})
}
И прямо сейчас возникает проблема, для которой я не могу найти простое чистое решение на данный момент. Когда я использую интерактивные всплывающие жесты, переход выглядит правильно. Но если я нажимаю кнопку «Назад», анимация кажется ошибочной. Почему координатор выполняет свою работу при использовании жеста, но не при нажатии кнопки «Назад». Для меня это похоже на ошибку. Есть ли у кого-нибудь такая же проблема, как у вас, и если да, то как вы можете ее избежать?