在 UINavigationController 中收到有关不成功的向后滑动手势的通知

Get notified about unsuccessful back swipe gestures in UINavigationController

我有一个 UINavigationController 子类,它管理一个自定义导航栏。此导航栏的外观取决于顶视图控制器。当 -pushViewController:animated:-popViewControllerAnimated: 发生时,我向顶视图控制器询问要显示的栏的类型。

问题是,当用户开始滑动时播放导航栏类型更改,但我找不到任何告诉我滑动是否成功的事件,所以如果用户取消滑动,我卡住了在前一个视图控制器上,在导航堆栈中其下方的导航栏具有所需的导航栏外观。

我试过 UINavigationControllerDelegate,但 -navigationController:didShowViewController:animated:-navigationController:didShowViewController:animated: 都没有被调用。我的第二个想法是使用 interactiveGestureRecognizer,但它似乎在成功和取消后向滑动时成功结束,并且 topViewController 在调用识别器事件时也仍然相同。

我知道,顶视图控制器的 -viewDidAppear 将在取消滑动时再次调用,但我不希望我的用户在他们的控制器中实现任何逻辑来支持我的导航实现。

有什么想法吗?

尝试使用 UINavigationControllerDelegate,您可以依靠其回调来了解 viewController 何时显示或不显示。

Getting interactivePopGestureRecognizer dismiss callback/event