interactivePopGestureRecognizer перестает работать, когда установлен делегат UINavigationController.Зачем? - PullRequest
0 голосов
/ 27 мая 2019

В моем коде один из контроллеров представления в стеке контроллера навигации устанавливает себя как делегат navigationController в его viewDidLoad. Я делаю это, чтобы предоставить пользовательский аниматор для операции push. Я предоставляю реализацию только для navigationController(_:animationControllerFor:from:to:) и ничего больше.

Я также гарантировал, что не пропущу ни одного вызова super ни в одном из переопределенных методов.

Но побочным эффектом этого является то, что интерактивный жест перестал работать т.е. когда я выполняю жест, ничего не происходит.

При копании глубже я обнаружил, что это вызвано делегатом interactivePopGestureRecognizer. Этот делегат предоставляется системой. Я не устанавливаю это нигде в моем коде.

Я обнаружил, что когда я устанавливаю делегата navigationController, делегат interactivePopGestureRecognizer блокирует жест, возвращая false для func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool.

Я хочу знать, почему происходит такое поведение.

Я нашел обходные пути для этой проблемы в stackOverflow здесь и здесь но там причина проблемы в другом.

То, что я хочу узнать, является основной причиной такого поведения в моем случае. Почему iOS отключает поведение при настройке делегата navigationController.

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

Я также просмотрел документацию Apple для UINavigationController, но не нашел ничего, что могло бы объяснить эту проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...