滚动视图时,cellForItemAt indexPath会产生问题

时间:2018-11-26 09:41:07

标签: ios swift collectionview

我有一个具有节的collectionView,而节中的numberOfItems为100。我正在根据cellforItemAt indexPath方法(即

)中的条件加载集合视图
if (indexPath.row % 5 == 0) {
 cellWidth = 100
} else {
 cellWidth = 50
}

这可以正确加载收藏夹视图,但是当我滚动收藏夹视图时,它无法按预期工作。

图片1是Iam期望的 图片2是滚动视图时得到的。

this is what I need

when I scroll the collection view it changes the UI

3 个答案:

答案 0 :(得分:4)

由于单元格是可重用的,因此建议不要更改宽度值

 func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

    if indexPath.row % 5 == 0 {
      return CGSize(width: 100, height:10)
    }else {
      return CGSize(width:50, height:10 
    }
}

答案 1 :(得分:3)

要确定单元格内内容的宽度,我建议使用sizeForItemAtIndexPath,如下所示:

首先使您的控制器符合协议UICollectionViewDelegateFlowLayout并实现方法:

extension YourViewController: UICollectionViewDelegateFlowLayout {

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        if indexPath.row % 5 == 0 {
            return CGSize(width: 100, height: YourCellHeight)
        } else {
            return CGSize(width:50, height: YourCellHeight) 
        }
    }
}

答案 2 :(得分:0)

tableView中也出现了滚动问题,CellView中有一个名为prepareForReuse()的函数可以用来解决此问题;在这种情况下,您应该重置cellWidth的值,因为有时在滚动collectionView时,变量会变得混乱

在CollectionViewCell中,您可以像这样调用此函数

override func prepareForReuse() {
    super.prepareForReuse()
    cellWidth = nil
}

了解您的单元格是自定义单元格还是常规UICollectionViewCell可能会有所帮助