我不知道为什么,但我的collectionView的单元格在reloadData后自动错误地调整了大小。
在第一次初始化之后,然后在重新加载数据之后:
第一节第一节第一节第一节第一次
我使用UICollectionViewDelegateFlowLayout
来定义单元格的大小,但它没有处理这个问题:
func collectionView(_ collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout,
sizeForItemAt indexPath: IndexPath) -> CGSize {
let paddingSpace = sectionInsets.left * (2 + 1)
let availableWidth = view.frame.width - paddingSpace
let widthPerItem = availableWidth / 2
return CGSize(width: widthPerItem, height: widthPerItem)
}
func collectionView(_ collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout,
insetForSectionAt section: Int) -> UIEdgeInsets {
return sectionInsets
}
func collectionView(_ collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout,
minimumLineSpacingForSectionAt section: Int) -> CGFloat {
return sectionInsets.left
}
当在cellForItemAt
中执行时,单元格具有正确的大小,阴影在此函数中创建,并且具有正确的宽度。
最后一件事是,只有宽度是调整大小,高度保持我想要的。
有人知道为什么在reloadData之后宽度会错误地调整大小吗?
2条答案
按热度按时间qhhrdooz1#
我在扩展UICollectionViewDelegateFlowLayout时遇到了类似的问题,结果是在故事板(大小检查器)中将collectionView的估计大小设置为“无”解决了这个问题。
如Xcode 11发行说明中所述:
UICollectionView中的单元格现在可以使用画布中的自动布局约束视图自行调整大小。若要选择现有集合视图的行为,请从“大小”检查器中为集合视图的估计大小启用“自动”,为单元格大小启用“自动”。如果在iOS 13之前部署,则可以通过在viewDidLoad()期间调用performBatchUpdates(_:completion:)来激活自行调整大小的集合视图单元格。(45617083)
因此,新创建的collectionViews将属性“Estimated Size”设置为“Automatic”,并且计算单元格的大小时考虑其子视图维度,从而忽略UICollectionViewDelegateFlowLayout扩展方法,即使调用了这些方法。
dphi5xsq2#
在我的例子中,这种行为的原因是在我的自定义UICollectionViewCell单元格中缺少对
super.prepareForReuse
in overrided方法的调用。所以我简单地加了一下,问题就解决了。:]