UICollectionView刷新问题

时间:2017-03-28 05:24:28

标签: ios swift uicollectionview uicollectionviewlayout

在iOS应用中,我有UICollectionView,其中包含100个(或80或40个)单元格。 一开始一切都很好,布局正常,每个单元格的大小也正确,如果有100个则更小,如果只有40个单元格则更大。

在应用程序内部,用户可以将单元格数量更改为100(或80或40)。 当数字改变时,应相应地改变每个单元的布局和大小。但那部分不能按预期工作。

当用户更改执行此代码的单元格数时:

myCollectionView.reloadData()
myCollectionView.collectionViewLayout.invalidateLayout()

由于某些原因,某些事情无效。我应该在上面的代码中做更多或更多的事情吗? 细胞数量是正确的,但新闻细胞的大小搞砸了,我不完全确定布局(定位)。

就UICollectionViewDelegate协议而言,我只实现了一个方法:

func collectionView(_ collectionView: UICollectionView,
                    didSelectItemAt indexPath: IndexPath) {
    .........
}

对于UICollectionViewDelegateFlowLayout协议,我实现了以下内容:

func collectionView(_ collectionView: UICollectionView,
                    layout collectionViewLayout: UICollectionViewLayout,
                    sizeForItemAt indexPath: IndexPath) -> CGSize {
     let cellSide = UIScreen.main.bounds.width * 3 / CGFloat(brain.getSide()! * 4)
    return CGSize(width: cellSide, height: cellSide)
}


func collectionView(_ collectionView: UICollectionView,
                    layout collectionViewLayout: UICollectionViewLayout,
                    minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
    return 6.0
}


func collectionView(_ collectionView: UICollectionView,
                    layout collectionViewLayout: UICollectionViewLayout,
                    minimumLineSpacingForSectionAt section: Int) -> CGFloat {
    return UIScreen.main.bounds.width / (CGFloat(brain.getSide()!) * 4.4)
}

看起来上面的方法在开始时工作正常,给出了足够的值。但是,当用户更改设置时,它们似乎甚至都没有被调用。

2 个答案:

答案 0 :(得分:1)

请尝试这种重装方法

<强>目标c

myCollectionView?.performBatchUpdates({
            myCollectionView.reloadData()
        }, completion: { (result: Bool) in
        })

夫特-3

for(var i = 0; i < fruits.Length; i++)
{
    if(fruits[i] == 'Apple')
    {
        fruits[i] = 'Peer';
    }
}
else { continue; }

答案 1 :(得分:0)

我最终通过解决问题,使用具有不同单元标识符的单元原型来满足我需要的每个尺寸,并且它完美地运行。