UINavigationController 交互式弹出手势仅在第一次工作
Posted
技术标签:
【中文标题】UINavigationController 交互式弹出手势仅在第一次工作【英文标题】:UINavigationController Interactive Pop Gesture only works first time 【发布时间】:2018-06-20 06:22:59 【问题描述】:我已经在一个应用程序上工作了一段时间,并且刚刚意识到在详细视图中滑回只会让我第一次返回到主视图。它也不顺利,即使它是第一次工作。即使我缓慢地滑动,它也不会顺利进入主视图,而是立即跳跃。它曾经正常工作,但我没有专门对此进行测试,所以我不知道它什么时候停止工作以及我改变了什么导致这个。
关于如何设置我的应用程序的一些信息...
我有一个拆分视图控制器,它连接到我的MasterTableViewController
和DetailViewController
。
这两个都有 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 自定义过渡