我处理UICollectionViewLayout
的自定义子类,其中包含固定列和垂直增长的项目,类似于Trello。每个项目基本上都是一个包含一些垂直堆叠标签的视图。
目前我观察到的是shouldInvalidateLayout(forPreferredLayoutAttributes:)
正在调用自动布局大小计算,但大小相当于fittingSize
。
我想知道是否有任何方法可以约束preferredLayoutAttributes
宽度,因为我有固定的宽度列,让它为我计算高度?
override func shouldInvalidateLayout(forPreferredLayoutAttributes preferredAttributes: NSCollectionViewLayoutAttributes, withOriginalAttributes originalAttributes: NSCollectionViewLayoutAttributes) -> Bool {
if preferredAttributes.size != originalAttributes.size {
return true
}
return false
}
override func invalidationContext(forPreferredLayoutAttributes preferredAttributes: NSCollectionViewLayoutAttributes, withOriginalAttributes originalAttributes: NSCollectionViewLayoutAttributes) -> NSCollectionViewLayoutInvalidationContext {
let invalidationContext = super.invalidationContext(
forPreferredLayoutAttributes: preferredAttributes,
withOriginalAttributes: originalAttributes
) as! WeekViewInvalidationContext
// save computed attributes to apply them later during invalidateLayout
invalidationContext.updatedPreferredLayoutAttributes = preferredAttributes
return invalidationContext
}