UICollectionView:ScrollToItem 到中心单元格在水平集合视图上不起作用

Posted

技术标签:

【中文标题】UICollectionView:ScrollToItem 到中心单元格在水平集合视图上不起作用【英文标题】:UICollectionView: ScrollToItem to center cell does not work on horizontal collection view 【发布时间】:2018-05-08 11:00:19 【问题描述】:

我有一个带有内容偏移的水平 UICollectionView,这样每个元素(包括最左边的项)都可以滚动到中心:

let cvOffset = (UIScreen.main.bounds.width - tileSize) / 2
collectionView.contentInset = UIEdgeInsets(top: 0, left: cvOffset, bottom: 0, right: cvOffset)
collectionView.scrollIndicatorInsets = UIEdgeInsets(top: 0, left: cvOffset, bottom: 0, right: cvOffset)

但是,当我使用scrollToItem 方法时,它只对右半部分有效。如果我选择左半部分的任何项目,则输入第一个单元格。你知道为什么吗?

collectionView.scrollToItem(at: IndexPath.init(row: sender.tag, section: 0), at: .centeredHorizontally, animated: true)

【问题讨论】:

我已经直接使用setContentOffset 来代替 【参考方案1】:

不确定这是否是 UICollectionView 中的错误与流布局或某种期望的结果,但您可以通过将 UICollectionViewFlowLayouts sectionInset 设置为您的内容插入然后 scrollToItem 来做您需要的事情按预期工作:

所以删除你的 contentInset 并在你的布局中添加以下内容:

layout.sectionInset = UIEdgeInsets(top: 0, left: cvOffset, bottom: 0, right: cvOffset)

在我的测试应用程序中,它完成了它应该做的事情,因此滚动到选定的单元格并为所有 indexPaths 居中

【讨论】:

哇,感谢您提供的出色解决方案!这非常有效! 太棒了!很高兴我能提供帮助,而且我也学到了一些新东西,我确信 contentOffset 的方式应该可行,但它没有:)

以上是关于UICollectionView:ScrollToItem 到中心单元格在水平集合视图上不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Cypress web自动化30-操作窗口滚动条(scrollTo)

如何使用平滑效果的 window.scrollTo() [关闭]

为啥 scrollTo() 方法不适用于 iframe?

如何在 window.scrollTo() 之外滚动页面

如何使用 JQuery $.scrollTo() 函数滚动窗口

有啥方法可以平滑地为 window.scrollTo(0, 1) 设置动画?