iOS:`UICollectionview`,如何通过它的`indexPath`获取单元格的`contentoffset`

Posted

技术标签:

【中文标题】iOS:`UICollectionview`,如何通过它的`indexPath`获取单元格的`contentoffset`【英文标题】:iOS: `UICollectionview`, how to get a cell's `contentoffset` by it's `indexPath` 【发布时间】:2016-05-30 08:44:08 【问题描述】:

我正在使用带有圆形布局的UICollectionview。我正在尝试计算每个项目的 contentOffset,但使用圆形布局,完整的 contentsize 似乎与内容不匹配。

collectionview 的总 contentSize = 780 最后一项的内容偏移量 = 397(?) 每个项目的内容偏移量 = 33(?)

有什么方法可以通过 indexPath 或至少是 collectionview 中最后一个项目的正确 (397) 值来获取项目的偏移量?我通过测试和打印contentoffset 获得了这些值,但我想通过代码计算这些数字(33 和 397),而无需滚动。

那么有没有办法通过indexPath 计算collectionview 内的单元格contentoffset(?)? 谢谢!

【问题讨论】:

也许你可以得到单元格的框架并知道计算它的内容偏移量? UICollectionViewLayoutAttributes *attributes = [self.collectionView layoutAttributesForItemAtIndexPath:indexPath]; CGRect cellRect = attributes.frame; 好的,我有我的单元格的 x,y,width 和 height..但是我想要我的 uicollectionview 中项目的内容偏移量。我会使用什么代码? ContentOffset 告诉您如果 scrollView 的 contentSize 大于它的 frame.size,则 scrollView 在某个方向上滚动了多少,否则 contentOffset 为 0。如果您想将其转换为 UICollectionViewCell 的位置,那将是一些东西比如:CGFloat offsetY = fabs(self.collectionView.contentOffset.y - cellLayoutAttributes.frame.origin.y);但我不知道你为什么需要那个。老实说,我不确定这是正确的逻辑,因为 UICollectionViewCell 不能有 contentOffset,它有 frame 和 indexPath。 我知道单元格只有一个框架和索引路径,但我需要每个单元格的滚动视图的偏移量。大项目是我有 2 个集合视图,我想将平移手势从第一个集合视图转换为第二个集合视图,其完整的 contentSize 比第一个集合视图小很多。我想在这 2 个 contentSize 之间找到一个乘数,但是......我的 contentSize 值不正确,所以我想计算 1 个单元格的 contentOffset 并将其与 collectionview 中的项目数相乘。希望你能理解。 【参考方案1】:

我发现了问题,scrollviewcontentsize是内容的大小+uicollectionview's框架的大小。这就是 contentSize 返回的大小比实际内容大的原因。

所以: (contentSizeX - collectionviews frame X) / cells = contentOffset per item (780 - 383) / 12 => 33

【讨论】:

以上是关于iOS:`UICollectionview`,如何通过它的`indexPath`获取单元格的`contentoffset`的主要内容,如果未能解决你的问题,请参考以下文章

iOS:`UICollectionview`,如何通过它的`indexPath`获取单元格的`contentoffset`

iOS6 UICollectionView 和 UIPageControl - 如何获得可见单元格?

如何在 iOS Objective-c 的 UICollectionView 中创建无限滚动

iOS 用 UICollectionView 如何实现这种布局

iOS - 设置为 0 时 UICollectionView 间距仍然存在 - 如何设置单元格之间没有间距

如何将视频从 ALAsset 显示到 UICollectionview ios