UICollectionView 单元格选择问题 - 加载视图时只能选择可见区域上的单元格

Posted

技术标签:

【中文标题】UICollectionView 单元格选择问题 - 加载视图时只能选择可见区域上的单元格【英文标题】:UICollectionView cell selection issue - only cells on the visible area when view is loaded can not be selected 【发布时间】:2016-03-27 16:08:32 【问题描述】:

我正在尝试使用 UICollectionView 为我的应用开发日历。

ScreenShot of my day calendar.The view contain 00:00 to 24:00 is developed by collection view. In the bottom is a tableview

我使用自定义 UICollectioViewLayout 来显示每个单元格,它工作正常!!每个单元格都显示在正确的位置。

为了显示每个事件的更多信息,我实现了 [didSelectItemAtIndexPath] 方法和 [prepareForSegue] 方法,以在用户触摸单元格时触发弹出视图以显示数据。

但是,只有在collectionview首次加载时不显示在可见区域中的单元格才能被选中。

我的意思是collectionview的contentsize是[1560,340],collectionview的frame size是[560, 340]。所以这个集合视图可以垂直滚动。我发现如果某个单元格的位置高于[560, 340](例如[30,340]),则无法选择该单元格。如果单元格的位置低于[560, 340],用户触摸这些单元格可以触发didSelectItemAtIndexPath方法并显示popoverview。

我完全不知道出了什么问题。有没有人遇到过类似的问题?

【问题讨论】:

如果你向下滚动,然后再向上滚动,你还能选择第一个项目吗? 【参考方案1】:

我发现问题可能来自zIndex。

在我的原始设计中。时间标签和两条垂直线,即 UILabel 的边界线,由 SupplementaryView 显示。事件由 UICollectionViewCell 显示。我发现如果我删除 SupplementaryView,所有单元格都可以正确选择。所以接下来我尝试通过 UICollectionViewCell 显示所有内容(事件、行、时间)。但是,选择问题仍然存在。最后发现有一个参数叫zIndex。在我将显示事件的单元格的 zIndex 设置为 1 并将其他单元格设置为 0 之后,选择问题就消失了。一切正常。

虽然我没有尝试,但我认为,在我最初的设计中,如果我将 SupplementaryView 的 zIndex 设置为 0 可能会解决选择问题。

【讨论】:

以上是关于UICollectionView 单元格选择问题 - 加载视图时只能选择可见区域上的单元格的主要内容,如果未能解决你的问题,请参考以下文章

ios UICollectionView 单元格选择和取消选择问题

UICollectionView,单元格选择不起作用,单元格滚动正常

IOS:通过长按选择 UICollectionView 单元格

UIcollectionview 一次选择多个单元格

如果在重新加载期间触摸单元格,则重新加载后无法选择 UICollectionView 单元格

在选择时为 UICollectionView 单元格设置动画