UINavigationController 交互式流行手势仅在第一次时有效

问题描述 投票:0回答:3

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

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

我有一个分割视图控制器,连接到我的

MasterTableViewController
DetailViewController

这两个都有 TableViews 并嵌入到导航控制器中。

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

我不认为我弄乱了任何后退按钮控件。我查看了我的代码和故事板,但找不到任何地方。这是最令人困惑的部分,因为这些问题(123)似乎都因更改后退按钮而出现问题,或者可以通过输入以下代码行来修复:

self.navigationController.interactivePopGestureRecognizer.delegate = nil

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

以下是如何设置的图片以供参考:

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

ios swift uinavigationcontroller interactivepopgesture
3个回答
0
投票

你什么时候打电话

self.navigationController.interactivePopGestureRecognizer.delegate = nil
? 这样做肯定会禁用交互式弹出窗口。听起来您可能会在某个
UIViewController
出现后调用此函数。

您还在对

UINavigationController
进行哪些其他修改?您正在使用外观委托吗? 你在子类化吗?如果是这样,您是否在所有方法重写中调用
super

还要检查子 ViewController 中对

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

希望这有帮助


0
投票

来自 Alex Chase 的回答:还要检查您对子

viewWillAppear
ViewControllers
的覆盖。该方法在交互式弹出期间被调用。

将其添加到

viewWillAppear
并且有效:

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

    }

0
投票

我在模拟器上测试我的应用程序时遇到了同样的问题。我什至尝试创建一个简单的项目来检查流行交互式手势是否真的只工作一次,而且确实如此。但当我尝试在物理设备上测试它时,弹出交互手势在所有情况下都运行顺利且没有失败。因此,我可以自信地说,这个问题仅与模拟器有关,与您的代码或 SDK 无关。

© www.soinside.com 2019 - 2024. All rights reserved.