为什么Collection View使用此代码加载中心轮播?

时间:2019-04-13 01:12:24

标签: ios swift xcode scroll collectionview

我一直试图弄清楚如何使我的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
    }
}

1 个答案:

答案 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转到第二个单元格时,它就被卡在了始终是第二个项目(这似乎没有滚动,但是滚动发生了,并且您不会注意到它是立即发生的),因此需要布尔变量来使滚动动作一旦发生,即滚动到指定的索引。