Ios UIKit集合视图,奇怪行为(访问/滚动单元格)

Ios UIKit集合视图,奇怪行为(访问/滚动单元格),ios,swift,uicollectionview,uikit,uitouch,Ios,Swift,Uicollectionview,Uikit,Uitouch,因此,我最近在我的应用程序中实现了一个集合视图,我发现了一个我似乎无法解决的错误,搜索了它,没有看到任何关于它的线索 如果我的光标/手指在单元格上,我无法在集合视图中滚动,我需要选择一个“空”区域进行滚动 我遇到的第二个奇怪的行为是我不能直接触摸手机。我需要在它上面做一些滑动手势,以便在选择单元格时触发代码 如果我转到故事板上的“收藏”视图,并在“滚动视图”部分中选择“延迟内容触摸”和“可取消内容触摸”,收藏视图将正常滚动,但如果我将手指/光标放在启用了这些选项的单元格上,我将无法再访问任何

因此,我最近在我的应用程序中实现了一个集合视图,我发现了一个我似乎无法解决的错误,搜索了它,没有看到任何关于它的线索

如果我的光标/手指在单元格上,我无法在集合视图中滚动,我需要选择一个“空”区域进行滚动

我遇到的第二个奇怪的行为是我不能直接触摸手机。我需要在它上面做一些滑动手势,以便在选择单元格时触发代码

如果我转到故事板上的“收藏”视图,并在“滚动视图”部分中选择“延迟内容触摸”和“可取消内容触摸”,收藏视图将正常滚动,但如果我将手指/光标放在启用了这些选项的单元格上,我将无法再访问任何单元格

这完全把我弄糊涂了


感谢您阅读/考虑此线程。

让我们看看您的两个属性的作用

delaysContentTouches
:如果此属性的值为true,则滚动视图会延迟处理触摸手势,直到它能够确定滚动是否是目的。如果该值为false,则滚动视图会立即调用touchesshouldbeagin(:with:in:)。默认值为true

canCancelContentTouches
:如果此属性的值为true,并且内容中的视图已开始跟踪触摸它的手指,并且如果用户拖动手指到足以启动滚动,则视图将收到touchscancelled(u:with:)消息,滚动视图将触摸作为滚动处理。如果此属性的值为false,则一旦内容视图开始跟踪,无论手指移动如何,滚动视图都不会滚动

首先,将delaysContentTouches设置为false。因此,scrollview立即调用内容视图的触摸处理方法,允许它处理触摸。显然,滚动视图不会立即开始滚动,即使您拖动

其次,您还将canCancelContentTouches设置为false。但是,如果不允许滚动视图“接管”内容已经处理过的内容(通过取消它们),那么它以后也无法开始滚动。因此,如果您的触摸点击了内容视图,则滚动视图无法开始滚动:不允许立即滚动,因为不允许延迟内容触摸,也不能稍后开始滚动,因为无法取消内容触摸


我不知道你的牢房里发生了什么,也不知道你在里面放了什么代码。但是,您可能应该允许tableview延迟触摸(这意味着您的手机无论如何都不会处理被立即取消的刷卡,因为它们是滚动手势)和取消内容触摸(这意味着当你按下并没有释放时,你仍然可以在单元格高亮显示后启动滚动手势)。

我在触摸单元格时也遇到了同样的问题,问题是我使用了多个UI手势,但没有为每一个添加“.cancelsTouchesInView=false”

因此,如果您正在使用UI手势,只需添加
您的手势即可。cancelsTouchesInView=false


你应该能够访问你的单元格

你的集合视图单元格上有哪些子视图?1个图像,1个覆盖图和1个简单的解决方法。创建一个示例应用程序。压缩文件。将其上载到github,让我们检查一下