1

我目前定义了以下组合布局:

func compose() -> NSCollectionLayoutSection {

    let heroItemSize = NSCollectionLayoutSize(
        widthDimension: .fractionalWidth(2/3),
        heightDimension: .estimated(550)
    )

    let heroItem = NSCollectionLayoutItem(layoutSize: heroItemSize)

    let sideKickItemSize = NSCollectionLayoutSize(
        widthDimension: .fractionalWidth(1.0),
        heightDimension: .fractionalHeight(0.5)
    )

    let sideKickItem = NSCollectionLayoutItem(layoutSize: sideKickItemSize)

    let sideKickGroupSize = NSCollectionLayoutSize(
        widthDimension: .fractionalWidth(1/3),
        heightDimension: .fractionalHeight(1.0)
    )

    let sideKickGroup = NSCollectionLayoutGroup.vertical(
        layoutSize: sideKickGroupSize,
        subitems: [sideKickItem, sideKickItem]
    )

    let topGroupSize = NSCollectionLayoutSize(
        widthDimension: .fractionalWidth(1.0),
        heightDimension: .estimated(550)
    )

    let topGroup = NSCollectionLayoutGroup.horizontal(
        layoutSize: topGroupSize,
        subitems: [heroItem, sideKickGroup]
    )

    return NSCollectionLayoutSection(group: topGroup)
}

这给了我以下布局:

当前布局

理想的情况是绿色单元格 (the heroItem) 具有一个应该领先的估计高度。紫色单元格 (the sideKickItem) 应与绿色单元格一样高。

我不确定为什么布局最终使用高度550作为最终高度,这使得紫色单元格的内容变得很大。

所以最后我希望布局如下图所示:

要求的布局

4

1 回答 1

0

解决方案:要进行的更改是微妙的:

1.Function必须返回一个UICollectionViewLayout而不是NSCollectionLayoutSection

  • NSCollectionLayoutSection = "将一组组组合成不同视觉分组的容器。"
  • UICollectionViewCompositionalLayout = "一个布局对象,可让您以高度自适应和灵活的视觉排列组合项目。"

2.将 NSCollectionLayoutSection 传递给 UICollectionViewCompositionalLayout

这些更改对我有用: 博客 UICollectionView

最终代码:

//change 1
func compose() -> UICollectionViewLayout {
//change 2
let section = NSCollectionLayoutSection(group: topGroup)    
let layout = UICollectionViewCompositionalLayout(section: section)
return layout

如果可行,请接受此作为答案。

于 2021-02-21T03:57:16.120 回答