我有一个具有节的collectionView,而节中的numberOfItems为100。我正在根据cellforItemAt indexPath方法(即
)中的条件加载集合视图if (indexPath.row % 5 == 0) {
cellWidth = 100
} else {
cellWidth = 50
}
这可以正确加载收藏夹视图,但是当我滚动收藏夹视图时,它无法按预期工作。
图片1是Iam期望的 图片2是滚动视图时得到的。
答案 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可能会有所帮助