Я пытаюсь воссоздать поведение, подобное тому, которое наблюдается для UINavigationController в приложении Apple News.
У меня есть два контроллера A и B, A встроен в UINavigationController и имеет переход к B.
Панель навигации в A скрыта, в то время как в B она видима, и при перемещении от одного к другому она анимируется правильно.
Для этого я устанавливаю A в качестве делегата для UINavigationController и добавляю
func navigationController(_ navigationController: UINavigationController, animationControllerFor operation: UINavigationController.Operation, from fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
if operation == .push {
navigationController.setNavigationBarHidden(false, animated: false)
}
return nil
}
func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
if let coordinator = navigationController.topViewController?.transitionCoordinator {
if let _ = viewController as? ViewControllerA {
navigationController.setNavigationBarHidden(true, animated: false)
}
coordinator.notifyWhenInteractionChanges { (context) in
if context.isCancelled == true {
navigationController.setNavigationBarHidden(false, animated: false)
}
}
}
}
Проблема, с которой я сталкиваюсь, связана с жестом смахивания назад.
Когда жест запускается, я скрываю панель навигации, чтобы ее не было видно в ViewControllerA, но если жест отменен, I 'm снова показывает полосу.
К сожалению, когда она снова отображается, хотя сама полоска видна, по какой-то причине кнопка возврата не появляется.
Знаете ли вы, почему это так?