[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
似乎与内容不匹配。
有什么方法可以通过 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调用scrollToItem不起作用的主要内容,如果未能解决你的问题,请参考以下文章
iOS:`UICollectionview`,如何通过它的`indexPath`获取单元格的`contentoffset`
在 iOS 8 中重新加载时未调用 UICollectionview cellForItemAtIndexPath
[iOS] UICollectionView调用scrollToItem不起作用