UINavigationController 交互式弹出手势仅在第一次工作

Posted

技术标签:

【中文标题】UINavigationController 交互式弹出手势仅在第一次工作【英文标题】:UINavigationController Interactive Pop Gesture only works first time 【发布时间】:2018-06-20 06:22:59 【问题描述】:

我已经在一个应用程序上工作了一段时间,并且刚刚意识到在详细视图中滑回只会让我第一次返回到主视图。它也不顺利,即使它是第一次工作。即使我缓慢地滑动,它也不会顺利进入主视图,而是立即跳跃。它曾经正常工作,但我没有专门对此进行测试,所以我不知道它什么时候停止工作以及我改变了什么导致这个。

关于如何设置我的应用程序的一些信息...

我有一个拆分视图控制器,它连接到我的MasterTableViewControllerDetailViewController

这两个都有 TableView 并嵌入在导航控制器中。

我已将其设置为应用程序最初加载到 MasterTableViewController 而不是立即加载到 DetailViewController,但即使我将其取出,交互式弹出手势也不起作用。

我不相信我弄乱了任何后退按钮控件。我查看了我的代码和情节提要,但找不到任何我拥有的地方。这是最令人困惑的部分,因为这些问题(1、2 和 3)似乎都有因更改后退按钮而导致的问题,或者可以通过输入以下代码行来解决:

self.navigationController.interactivePopGestureRecognizer.delegate = nil

将其添加到我的代码中似乎对其行为方式没有影响。

下面是它的设置图片以供参考:

我通常可以自己解决这些问题,但这个问题让我感到困惑,因为它第一次有效,但其他任何时候都无效。据我所知,第一次和其他人之间没有任何变化。我不知道是否有其他人遇到过同样的问题,但是对于为什么会发生这种情况的任何帮助将不胜感激。如果需要,我可以提供代码或回答有关我如何做某些事情的问题。我没有放任何东西,因为有很多不同的东西控制着这件作品,我不知道从哪里开始。

【问题讨论】:

【参考方案1】:

你什么时候打电话给self.navigationController.interactivePopGestureRecognizer.delegate = nil? 这样做肯定会禁用交互式弹出。听起来您可能会在某个 UIViewController 出现后调用它。

您还对UINavigationController 进行了哪些其他修改?你在使用外观委托吗? 你是子类吗?如果是这样,您是否在所有方法覆盖中都调用super

还要检查您在子 ViewController 中对 viewWillAppear 的覆盖。在交互式弹出期间调用此方法。如果您在此方法中的主线程上进行大量计算(或同步调用),则可能会导致丢帧,从而导致动画断断续续。

希望对你有帮助

【讨论】:

我将 self.navigationController.interactivePopGestureRecognizer.delegate = nil 放入我为导航控制器创建的类中 我没有对 UINavigationController 做任何其他事情,根本没有继承它 而且,动画不是断断续续的,它只是很快。一旦我开始手势,它就会完成动画,而不是让我从侧面拉出 MasterTableView。 删除 self.navigationController.interactivePopGestureRecognizer.delegate = nil 看看是否能解决问题 不,我补充说尝试修复它但没有效果。删除后还是不行【参考方案2】:

来自Alex Chase's answer:还要检查您在子ViewControllers 中对viewWillAppear 的覆盖。在交互式弹出期间调用此方法。

将其添加到 viewWillAppear 并且有效:

   override func viewWillAppear(_ animated: Bool) 
        super.viewWillAppear(animated)
        navigationController?.interactivePopGestureRecognizer?.delegate = self

    

【讨论】:

以上是关于UINavigationController 交互式弹出手势仅在第一次工作的主要内容,如果未能解决你的问题,请参考以下文章

提供自定义动画控制器时,UINavigationController 中的系统交互弹出手势中断

将触摸转发到 UINavigationController 交互式弹出手势不完全工作

UINavigationController 交互式弹出手势仅在第一次工作

带有 UINavigationController 的 iOS 7 自定义过渡

iOS学习心得——UINavigationController

iOS 7 仅在某些时候使用自定义交互过渡