在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)
}
看起来上面的方法在开始时工作正常,给出了足够的值。但是,当用户更改设置时,它们似乎甚至都没有被调用。
答案 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)
我最终通过解决问题,使用具有不同单元标识符的单元原型来满足我需要的每个尺寸,并且它完美地运行。