#ios #swift #uicollectionviewlayout #uicollectionviewcompositionallayout
#iOS #swift #uicollectionviewlayout #uicollectionviewcompositionallayout
Вопрос:
Контекст:
Я создаю ячейки, используя UICollectionViewCompositionalLayout и расчетную высоту, основанную на динамическом тексте внутри ячеек. Каждая ячейка имеет дополнительный элемент (кнопку) в нижнем конце угла. Небольшой отрывок кода, который создает макет:
// List item
let estimatedListItemHeight = CGFloat(240)
let listItemSize = NSCollectionLayoutSize(
widthDimension: .fractionalWidth(1/3),
heightDimension: .estimated(estimatedListItemHeight)
)
let listItem = NSCollectionLayoutItem(layoutSize: listItemSize, supplementaryItems: [makeOverflowButton()])
// List item group
let listItemGroupSize = NSCollectionLayoutSize(
widthDimension: .fractionalWidth(1),
heightDimension: .estimated(estimatedListItemHeight)
)
let listItemGroup = NSCollectionLayoutGroup.horizontal(
layoutSize: NSCollectionLayoutSize(
widthDimension: .fractionalWidth(1),
heightDimension: .estimated(estimatedListItemHeight)
),
subitem: listItem,
count: 3
)
Затем я использую отдельный метод для создания дополнительного элемента:
func makeOverflowButton() -> NSCollectionLayoutSupplementaryItem {
let overflowSize = NSCollectionLayoutSize(
widthDimension: .fractionalWidth(1),
heightDimension: .estimated(25)
)
return NSCollectionLayoutSupplementaryItem(
layoutSize: overflowSize,
elementKind: OverflowSupplementaryButton.supplementaryViewKind,
containerAnchor: NSCollectionLayoutAnchor(edges: [.bottom, .trailing])
)
}
Проблема:
Поскольку ячейки являются динамическими по высоте, дополнительные элементы не находятся в одном y
положении друг с другом. Однако я хочу, чтобы они были динамическими, а также чтобы каждый дополнительный элемент был одинаковым y
. Смотрите изображение ниже:
Возможно, идея может заключаться в том, чтобы вместо этого иметь возможность помещать дополнительные элементы в их содержащую группу ( listItemGroup
в моем отрывке выше), но есть ли способ поместить дополнительные элементы в a NSCollectionLayoutGroup
?
Если нет, то каков наилучший способ достижения этого результата?