swift UINavigationController交互式弹出手势仅适用于第一次

vdzxcuhz  于 12个月前  发布在  Swift
关注(0)|答案(3)|浏览(119)

我已经在一个应用程序上工作了一段时间,刚刚意识到在细节视图中向后滑动只会让我第一次返回主视图。它也不平滑,即使它第一次工作。它不是平滑地进入主视图,而是一次跳跃,即使我慢慢滑动。它过去工作正常,但我没有专门测试过这一点,所以我不知道它什么时候停止工作的,也不知道我改变了什么导致了这个。
关于我的应用程序是如何设置的一点.
我有一个分割视图控制器连接到我的MasterTableViewControllerDetailViewController
这两个都有TableView,并嵌入到导航控制器中。
我已经设置了它,使应用程序最初加载到MasterTableViewController,而不是立即转到DetailViewController,但即使我把这个,交互式弹出手势不工作。
我不相信我已经弄乱了任何后退按钮控件。我已经看过我的代码和故事板,找不到任何地方,我有。这是最令人困惑的部分,因为这些问题(123)似乎都有问题源于更改后退按钮或可以通过输入以下代码行来修复:

self.navigationController.interactivePopGestureRecognizer.delegate = nil

字符串
将其添加到我的代码中似乎对它的行为没有影响。
下面是一张图片,它是如何设置的参考:

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

nfs0ujit

nfs0ujit1#

你什么时候调用self.navigationController.interactivePopGestureRecognizer.delegate = nil?这样做肯定会禁用交互式弹出。听起来你可能会在某个UIViewController出现后调用它。
你还对UINavigationController做了什么修改?你是否使用了外观委托?你是否在子类化?如果是,你是否在所有的方法覆盖中调用super
同时检查你在子ViewControllers中对viewWillAppear的重写。这个方法在交互式弹出过程中被调用。如果你在这个方法中的主线程上做了大量的计算(或同步调用),它可能会导致帧丢失,因此动画不连贯。
希望这有帮助

ghhaqwfi

ghhaqwfi2#

From Alex Chase's answer:同时检查子ViewControllersviewWillAppear的覆盖。在交互式弹出期间调用此方法。
将其添加到viewWillAppear,它工作了:

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

    }

字符串

6rvt4ljy

6rvt4ljy3#

我在模拟器上测试我的应用程序时遇到了同样的问题。我甚至尝试创建一个基本项目来检查弹出交互手势是否真的只工作一次,它确实是。但是当我试图在物理设备上测试它时,弹出交互手势在任何情况下都能顺利工作。所以,我可以自信地说,这个问题只与模拟器有关,而与您的代码或SDK无关。

相关问题