Sea*_*ser 12 autolayout uicollectionview
我正在使用带有Flow布局的UICollectionView,并尝试根据AutoLayout约束使collectionView适当调整单元格的大小.
虽然单元格按预期工作,但我遇到的问题是我添加到CollectionView的任何补充视图的布局问题.
具体来说,在我滚动之后,在"校正"之前,在初始布局上,optionalView将处于错误的位置(即,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
}()
Run Code Online (Sandbox Code Playgroud)
2.使用AutoLayoutCollectionViewCell的子类
class AutoLayoutCollectionViewCell: UICollectionViewCell {
override func preferredLayoutAttributesFittingAttributes(layoutAttributes: UICollectionViewLayoutAttributes) -> UICollectionViewLayoutAttributes {
layoutIfNeeded()
layoutAttributes.bounds.size.height = systemLayoutSizeFittingSize(UILayoutFittingCompressedSize).height
return layoutAttributes
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,此时,一切都按预期工作.
下一步是我们失败的地方.
3.提供标题的参考大小
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
return CGSizeMake(CGRectGetWidth(collectionView.frame), 30.0)
Run Code Online (Sandbox Code Playgroud)
}
我的问题是:为什么会这样?我怎样才能纠正这个问题?我怎么能处理自我调整其细胞大小的collectionView中的补充视图?
小智 14
我有同样的问题,为我解决的是子类UICollectionViewFlowLayout并覆盖以下函数:
override func invalidationContext(forPreferredLayoutAttributes preferredAttributes: UICollectionViewLayoutAttributes, withOriginalAttributes originalAttributes: UICollectionViewLayoutAttributes) -> UICollectionViewLayoutInvalidationContext {
let context = super.invalidationContext(forPreferredLayoutAttributes: preferredAttributes, withOriginalAttributes: originalAttributes)
context.invalidateSupplementaryElements(ofKind: UICollectionElementKindSectionHeader,
at: [originalAttributes.indexPath])
return context
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1106 次 |
| 最近记录: |