约束preferredLayoutAttributes的宽度

时间:2018-03-10 17:03:03

标签: swift macos nscollectionview nscollectionviewlayout

我处理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
}

0 个答案:

没有答案