在一个 iOS 应用程序中,我有一个 UICollectionView
,它有 100(或 80,或 40)个开始的单元格。
一开始一切都很好,布局还可以,每个单元格的大小也合适,100个就小一些,只有40个就大一些。
在应用内,用户可以将单元格数量更改为 100(或 80,或 40)。 当数字发生变化时,每个单元格的布局和大小都应相应更改。但是那部分没有按预期工作。
当用户更改单元格数量时,将执行此代码:
myCollectionView.reloadData()
myCollectionView.collectionViewLayout.invalidateLayout()
由于某些原因,有些东西不起作用。我应该在上面的代码中做更多或不同的事情吗? 单元格的数量是正确的,但新闻单元格的大小乱七八糟,我对布局(定位)不太确定。
就UICollectionViewDelegate协议(protocol)而言,我只实现了一个方法:
func collectionView(_ collectionView: UICollectionView,
didSelectItemAt indexPath: IndexPath) {
.........
}
对于 UICollectionViewDelegateFlowLayout 协议(protocol),我实现了以下内容:
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)
}
看起来上面的方法在开始时工作正常,给出了足够的值。但是当用户更改设置时,它们甚至似乎都不会被调用。
最佳答案
请试试这个重载方法
objective-c
[self.collectionView performBatchUpdates:^{
[myCollectionView reloadData];
}
completion:^(BOOL finished) {}
];
swift -3
myCollectionView?.performBatchUpdates({
myCollectionView.reloadData()
}, completion: { (result: Bool) in
})
关于ios - UICollectionView刷新问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43061207/