iOS 无限深度嵌套的 TableView/UIGestureRecognizer 视图树和 iPAD 需要 2 根手指在 tableview 上滚动

Posted

技术标签:

【中文标题】iOS 无限深度嵌套的 TableView/UIGestureRecognizer 视图树和 iPAD 需要 2 根手指在 tableview 上滚动【英文标题】:iOS infinitely deeply nested TableView/UIGestureRecognizer view tree AND iPAD requires 2 finger scrolling on a tableview 【发布时间】:2015-06-05 08:56:38 【问题描述】:

我这几天一直在尝试解决这个问题,但 google/SO 并没有帮助我。

从 iPAD 中查看 tableview 时,需要 2 指平移手势来滚动 tableview(仅当启用单元格的用户交互时)

我的一个朋友建议我可能有 2 个嵌套的手势识别器,这可能会导致这种行为。但是,这种行为在 iPhone 上不存在。

我的应用程序上有 2 个不同的 tableview,只有一个启用了用户交互的行为是这样的。我开始调试,发现了一些有趣的东西。

这是不需要 2 根手指平移的 tableview 的视图树的屏幕截图。 “损坏的”tableview 具有类似的视图树。这棵树似乎是无限的,我想知道为什么这不会导致崩溃。有人可以确认,这是预期的行为吗?

有没有人偶然发现在 iPAD 上的 tableviews 上强制使用 2 指平移手势。这似乎不是 ios 本机应用程序的默认行为。

非常感谢您的所有回答!

编辑 1:

- 2 指平移仅在动态原型单元格上强制执行,而不在具有静态单元格的 tableView 中强制执行。我一直在检查我的 tableViews 和单元格“构造函数”,但我没有做任何与手势相关的操作。

-self.tableView.panGestureRecognizer.minimumNumberOfTouches == 1

【问题讨论】:

至于那个截图 - 它不是视图树,它是变量/引用树。似乎是无限的,因为有引用循环UIScrollView <-> UIPanGestureRecognizer。 (但不是保留周期,所以没问题) 【参考方案1】:

检查您的 scrollView 的 panGestureRecognizer.minimumNumberOfTouches 是否以某种方式设置为 2,如果有,请检查是谁做的。

【讨论】:

感谢您的快速响应。 self.tableView.panGestureRecognizer.minimumNumberOfTouches == 1.【参考方案2】:

我找到了答案。

我在:didHighlightRowAtIndexPath 上显示了一个 alertView。

将其更改为:didSelectRowAtIndexPath 解决了问题,让我现在可以用一根手指滚动。

【讨论】:

以上是关于iOS 无限深度嵌套的 TableView/UIGestureRecognizer 视图树和 iPAD 需要 2 根手指在 tableview 上滚动的主要内容,如果未能解决你的问题,请参考以下文章

iOS 中深度嵌套的视图层次结构可以吗?

如何在反应中超过最大更新深度

在两个嵌套子类中调用 super.viewDidLoad() 时,我遇到了 Swift 的无限循环

ReactJs 超过最大更新深度

AlamoFire 4.0 + SwiftyJSON 展开深度嵌套的 JSON

ReactJS - 超出最大更新深度错误