В моем приложении у меня есть пользовательский интерактивный переход для некоторых контроллеров представления. Я говорю о UINavigationController
интерактивных переходах для push / pop. Для всех других контроллеров представления я хочу использовать интерактивный переход iOS по умолчанию (проводя слева направо, чтобы вернуться назад).
Чтобы активировать свой пользовательский интерактивный переход, я должен реализовать UINavigationControllerDelegate
и реализовать обратный вызов animationControllerFor
. Это отлично работает! Но если я попытаюсь вернуть nil
для некоторых случаев, то есть я не хочу свой собственный переход и вместо этого использую переход по умолчанию, он полностью отключит обратные прокрутки!
Код для воспроизведения вопроса:
class MainNavigationController: UINavigationController, UINavigationControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = self
}
func navigationController(_ navigationController: UINavigationController,
animationControllerFor operation: UINavigationControllerOperation,
from fromController: UIViewController,
to toController: UIViewController) -> UIViewControllerAnimatedTransitioning? {
return nil
}
}
Используйте это MainNavigationController
, и все ваши удары назад будут отключены внутри этого контроллера навигации! Я не ожидал этого. Поскольку в документации сказано о возвращаемом значении:
Объект-аниматор, отвечающий за управление анимацией переходов, или nil, если вы хотите использовать стандартные переходы контроллера навигации.
https://developer.apple.com/documentation/uikit/uinavigationcontrollerdelegate/1621846-navigationcontroller
Кто-нибудь знает, что я делаю не так или это ошибка? Я пробовал это на iOS 11 и iOS 12 beta.