Я работаю над настраиваемым подклассом 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
}
@Willeke - это NSCollectionViewLayout на macOS
Я на самом деле отказался и исправил ширину в ограничениях для «ячеек», но действительно задаюсь вопросом, смогу ли я сделать это управляемым макетом





UICollectionViewLayoutи macOS?