Переход NavigationController с прозрачной панели навигации на непрозрачную

#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()
    })
}
  

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

введите описание изображения здесь