Как изменить размер элемента в зависимости от ширины экрана при использовании 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)
}()
1 ответ
Вместо звонка UICollectionViewCompositionalLayout(section:)
, который является статическим способом настройки раздела, используйте другой инициализатор, init(sectionProvider:)
, где вы передаете функцию поставщика раздела. Теперь ваша функция получает среду в качестве параметра, включая размер представления коллекции, поэтому теперь вы можете принимать решение в режиме реального времени в зависимости от среды. И вас снова вызовут, если среда изменится, так что вы можете иметь дело с изменением размера приложения (как в iPad, который переходит в режим разделения экрана).