我一直试图弄清楚如何使我的3个单元的集合视图加载到第二个单元中,而在通过StackOverFlow查看之后,我终于弄清楚了。但是,我遇到的代码让我有些困惑。谁能解释下面的这段代码为什么能使我的集合视图单元格(覆盖整个屏幕)从3个单元格中的第2个开始起作用? (这是我一直想要实现的效果,但是我想了解更多有关此代码为何能正常工作的信息。
在此代码块中,有一个bool变量和一个if语句,为什么需要它们?当我取出布尔变量和if语句时,集合视图无法滚动。
此代码块如何工作?
谢谢。
var onceOnly = false
internal override func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
if !onceOnly {
let indexToScrollTo = IndexPath(item: 1, section: 0)
self.collectionView.scrollToItem(at: indexToScrollTo, at: .left, animated: false)
onceOnly = true
}
}
答案 0 :(得分:0)
1- Docs中的scrollToItem
let indexToScrollTo = IndexPath(item: 1, section: 0)
self.collectionView.scrollToItem(at: indexToScrollTo, at: .left, animated: false)
使collectionView滚动到列表中的第二项
2-
当我取出布尔变量和if语句时,集合视图无法滚动
因为每个单元格的显示都调用willDisplay
,所以例如当您滚动到第三个单元格willdisplay
并导致collectionView转到第二个单元格时,它就被卡在了始终是第二个项目(这似乎没有滚动,但是滚动发生了,并且您不会注意到它是立即发生的),因此需要布尔变量来使滚动动作一旦发生,即滚动到指定的索引。