Swift - CompositionalLayout - 计算高度
Swift - CompositionalLayout - calculate height
我正在尝试使用 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
}
将组的高度设置为fractionalWidth
。下面的代码片段将使单元格的高度始终为屏幕高度的 30%。您也可以编写自己的高度确定逻辑并将其包装在 .absolute(customHeight).
中
let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0), heightDimension: .fractionalWidth(0.3))
我正在尝试使用 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
}
将组的高度设置为fractionalWidth
。下面的代码片段将使单元格的高度始终为屏幕高度的 30%。您也可以编写自己的高度确定逻辑并将其包装在 .absolute(customHeight).
let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0), heightDimension: .fractionalWidth(0.3))