我正在使用带有流布局的 UICollectionView 并尝试让 collectionView 根据 AutoLayout 约束适当调整单元格的大小。
虽然单元格按预期工作,但我添加到 CollectionView 的任何补充视图的布局都遇到了问题。
具体来说,在滚动后“更正”自身之前,supplementaryView 在初始布局上将位于错误的位置(即 y 原点不正确)。
作为参考,以下是我配置单元格大小的方法:
1.设置collectionViewLayout的估计项目大小
let collectionView: UICollectionView = {
let layout = UICollectionViewFlowLayout()
layout.estimatedItemSize = CGSizeMake(375, 50.0)
layout.minimumInteritemSpacing = 0.0
layout.minimumLineSpacing = 0.0
let view = UICollectionView(frame: CGRectZero, collectionViewLayout: layout)
view.backgroundColor = UIColor.whiteColor()
view.alwaysBounceVertical = true
return view
}()
2.使用Auto Layout CollectionView Cell的子类
class AutoLayoutCollectionViewCell: UICollectionViewCell {
override func preferredLayoutAttributesFittingAttributes(layoutAttributes: UICollectionViewLayoutAttributes) -> UICollectionViewLayoutAttributes {
layoutIfNeeded()
layoutAttributes.bounds.size.height = systemLayoutSizeFittingSize(UILayoutFittingCompressedSize).height
return layoutAttributes
}
}
请注意,此时一切都按预期进行。
下一步就是我们失败的地方。
3. 提供标题的参考尺寸
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
return CGSizeMake(CGRectGetWidth(collectionView.frame), 30.0)
}
我的问题是:为什么会发生这种情况?我怎样才能纠正这个问题?我应该如何处理自调整单元格大小的 collectionView 中的补充视图?