问题描述
在使用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:)
(这是设置部分的静态的方式),请使用其他初始化程序init(sectionProvider:)
,在其中传递 section提供程序功能。您的函数现在将环境作为参数(包括集合视图的大小)作为参数接收,因此现在您可以根据环境实时做出决定。如果环境发生变化,您会再次被呼叫,因此,您可以处理应用程序大小更改的问题(例如在进入分屏模式的iPad中)。