使用 UICollectionViewCompositionalLayout 时如何根据屏幕宽度更改项目大小
How to change item size based on screen width when using UICollectionViewCompositionalLayout
在我使用 UICollectionViewCompositionalLayout
的集合视图中,当视图宽度较小时,我希望项目大小为 85x85,否则为 100x100。但这在创建布局时指定,那么当屏幕宽度发生变化时如何更改布局大小,例如旋转 iPhone 或更改 iPad 上的拆分视图配置?
collectionView.collectionViewLayout = {
let size = CGFloat(view.bounds.width < 375 ? 85 : 100)
let itemSize = NSCollectionLayoutSize(widthDimension: .absolute(size), heightDimension: .absolute(size))
let item = NSCollectionLayoutItem(layoutSize: itemSize)
let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1), heightDimension: .absolute(size))
let group = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize, subitems: [item])
let section = NSCollectionLayoutSection(group: group)
return UICollectionViewCompositionalLayout(section: section)
}()
不是调用 UICollectionViewCompositionalLayout(section:)
,这是一种 static 设置部分的方法,而是使用另一个初始化程序 init(sectionProvider:)
,在其中传递 部分提供者功能。您的函数现在接收环境作为参数,包括集合视图大小,因此现在您可以根据环境实时做出决定。如果环境发生变化,你会再次被调用,所以很快,你可以处理应用程序大小的变化(就像进入分屏模式的iPad)。
在我使用 UICollectionViewCompositionalLayout
的集合视图中,当视图宽度较小时,我希望项目大小为 85x85,否则为 100x100。但这在创建布局时指定,那么当屏幕宽度发生变化时如何更改布局大小,例如旋转 iPhone 或更改 iPad 上的拆分视图配置?
collectionView.collectionViewLayout = {
let size = CGFloat(view.bounds.width < 375 ? 85 : 100)
let itemSize = NSCollectionLayoutSize(widthDimension: .absolute(size), heightDimension: .absolute(size))
let item = NSCollectionLayoutItem(layoutSize: itemSize)
let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1), heightDimension: .absolute(size))
let group = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize, subitems: [item])
let section = NSCollectionLayoutSection(group: group)
return UICollectionViewCompositionalLayout(section: section)
}()
不是调用 UICollectionViewCompositionalLayout(section:)
,这是一种 static 设置部分的方法,而是使用另一个初始化程序 init(sectionProvider:)
,在其中传递 部分提供者功能。您的函数现在接收环境作为参数,包括集合视图大小,因此现在您可以根据环境实时做出决定。如果环境发生变化,你会再次被调用,所以很快,你可以处理应用程序大小的变化(就像进入分屏模式的iPad)。