使用 UICollectionViewCompositionalLayout 时如何根据屏幕宽度更改项目大小

Posted

技术标签:

【中文标题】使用 UICollectionViewCompositionalLayout 时如何根据屏幕宽度更改项目大小【英文标题】:How to change item size based on screen width when using UICollectionViewCompositionalLayout 【发布时间】:2020-08-16 18:00:27 【问题描述】:

在我使用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 中一样)。

【讨论】:

是的,我愿意。 :) 让我先完成编辑我的答案。 github.com/mattneub/Programming-ios-Book-Examples/blob/master/… - 前两节说明了使用环境大小来决定布局细节。

以上是关于使用 UICollectionViewCompositionalLayout 时如何根据屏幕宽度更改项目大小的主要内容,如果未能解决你的问题,请参考以下文章

第一篇 用于测试使用

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份