首页 > 解决方案 > 从非导航控制器视图控制器返回时,通过在屏幕上的任意位置滑动退出 navigationItem 无法按预期工作

问题描述

我将以下代码添加到每个 VCTest:

    let popGestureRecognizer = self.navigationController!.interactivePopGestureRecognizer!
    if let targets = popGestureRecognizer.value(forKey: "targets") as? NSMutableArray {
      let gestureRecognizer = UIPanGestureRecognizer()
      gestureRecognizer.setValue(targets, forKey: "targets")
      self.view.addGestureRecognizer(gestureRecognizer)
    }

这使我可以从屏幕上的任何位置从屏幕上的任何位置滑回基本视图控制器(导航控制器的子级)。

然而,当我离开一个非导航控制器控制器,然后返回时,突然在屏幕上滑动不起作用。从字面上看,没有什么是可交互的。

为什么会发生这种情况,我该如何解决?

标签: iosswift

解决方案


interactivePopGestureRecognizer文档:

导航控制器在其视图上安装此手势识别器,并使用它从导航堆栈中弹出最顶层的视图控制器

所以基本上这只适用于堆栈ViewControllers内部。UINavigationController您可以做的是panGestureRecognizer为非导航控制器创建另一个:

let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(dismissController))
view.addGestureRecognizer(panGestureRecognizer)

@objc
func dismissController() {
    dismiss(animated: true)
}

推荐阅读