Swift - CompositionalLayout - 计算高度

Posted

技术标签:

【中文标题】Swift - CompositionalLayout - 计算高度【英文标题】:Swift - CompositionalLayout - calculate height 【发布时间】:2020-08-30 03:09:23 【问题描述】:

我正在尝试使用CompositionalLayout 创建一个电影海报网格。 但我正在为细胞高度而苦苦挣扎。 问题是,当我设置时,我需要每行渲染 3 张海报。它会自动计算宽度,因此基本上不同设备上的宽度会有所不同。

有没有办法保持纵横比或访问单元格宽度以计算.absolute() 中的高度?

我也尝试使用.estimated(100),但它的行为与.absolute(100) 相同

这是我现在的代码,单元格高度是硬编码的。

func moviesSection() -> NSCollectionLayoutSection 
    
    //define item
    let itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0), heightDimension: .fractionalHeight(1.0))
    let item = NSCollectionLayoutItem(layoutSize: itemSize)
    
    //configurate item
    item.contentInsets = NSDirectionalEdgeInsets(top: 0, leading: 0, bottom: 16, trailing: 16)
    
    //define group
    let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0), heightDimension: .absolute(160))
    let group = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize, subitem: item, count: 3)
    
    
    //define section
    let section = NSCollectionLayoutSection(group: group)
    
    return section

【问题讨论】:

【参考方案1】:

将组的高度设置为fractionalWidth。下面的代码 sn-p 将使单元格的高度始终为屏幕高度的 30%。您还可以编写自己的高度确定逻辑并将其包装在 .absolute(customHeight) 中。

let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0), heightDimension: .fractionalWidth(0.3))

【讨论】:

天哪,我不敢相信我从来没有想过在heightDimension 中使用.fractionalWidth。谢谢!

以上是关于Swift - CompositionalLayout - 计算高度的主要内容,如果未能解决你的问题,请参考以下文章

Swift入门系列--Swift官方文档(2.2)--中文翻译--About Swift 关于Swift

swift 示例BS swift.swift

swift swift_bug.swift

ios 整理(一)swift和oc的区别

swift swift_extension5.swift

swift swift_optional4.swift