[iOS] UICollectionView调用scrollToItem不起作用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[iOS] UICollectionView调用scrollToItem不起作用相关的知识,希望对你有一定的参考价值。

参考技术A

在做图片浏览的时候,需要在进入预览的时候,将collectionView滚动到点击的视图位置,这时候就使用到了 scrollToItemAtIndexPath:atScrollPosition: animated: 方法,但是在ios14的系统上,该方法没有生效,这里记录下相关问题的解决方法。

在合适的时候调用,如果是使用自动布局,建议在下面的方法中调用:

影响 scrollToItemAtIndexPath 未生效的原因是scrolViewl的自适应布局,只需要做以下设置即可:

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

【中文标题】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调用scrollToItem不起作用的主要内容,如果未能解决你的问题,请参考以下文章

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

在 iOS 8 中重新加载时未调用 UICollectionview cellForItemAtIndexPath

[iOS] UICollectionView调用scrollToItem不起作用

UICollectionView 不重用单元格

在 UICollectionview iOS 8 中包装单元格

UICollectionView 部分标题崩溃 iOS 8