我有一个简单的UICollectionView,我想在视图的宽度太大时更改单元格大小。
1 /我在siZeForItemAt
中完成工作 func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let collectionWidth = collectionView.frame.width
var width:CGFloat
if collectionWidth > 500 {
width = collectionWidth / 4 - 8
print("4 DE LARGE")
} else {
width = collectionWidth / 3 - 8
print("3 DE LARGE")
}
return CGSize(width: width, height: width)
}
2 /我重写viewWillTransition以在我的collectionView上调用invalidateLayout,这样我的collectionView将在evry方向改变时重绘。
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
self.collectionView.collectionViewLayout.invalidateLayout()
}
在第一个方向上改变它的效果很好。但如果我转到另一个视图,回到我的初始视图并回到之前的方向,则不会调用sizeForItemAt ...而且我的单元格的大小不会改变...我不会'明白为什么......我做错了什么?
答案 0 :(得分:0)
是否有同样的问题通过将宽度与UIScreen相关联来修复它。在我的情况下,单元格从左向右扩展。
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let width = UIScreen.main.bounds.width
return CGSize(width: width, height: 150)
}