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
似乎与内容不匹配。
有什么方法可以通过 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】:我发现了问题,scrollview
的contentsize
是内容的大小+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 如何实现这种布局