2

上下文:

我正在使用 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在我上面的摘录中),但是有没有办法把补充项目放在一个NSCollectionLayoutGroup

如果没有,实现这一结果的最佳方法是什么?

4

0 回答 0