问题描述
我正在尝试模仿当前快捷方式应用 UICollectionView 的行为,其中项目的默认显示为 2 列布局,但根据字体大小,它会更改为单列,其中单元格占满集合视图的宽度。
我正在向我的单元格标签添加动态类型,如果用户转到电话辅助功能并增加字体大小,我的标签也会增加,但现在标签字体增加但单元格仅在高度和我的集合视图中增加最终成为两列非常高的单元格。
我目前使用的是基本的 Flow Layout,没有进行任何自定义。我没有可以共享的有效代码或好的代码,但我正在寻找有关实现此目标的最佳方法的建议。
我的目标是 iOS 14,并使用 swift 5。
编辑 感谢 Witek 的回答,我能够使用 UICollectionViewCompositionalLayout 非常轻松地完成此操作,我什至不必订阅更改,只需在布局中查询 traitCollection 就足够了。这是我的最终结果:
private func createCompositionalLayout() -> UICollectionViewLayout {
let layout = UICollectionViewCompositionalLayout { (sectionIndex: Int,layoutEnvironment: NSCollectionLayoutEnvironment) -> NSCollectionLayoutSection? in
let columns = self.traitCollection.preferredContentSizeCategory.isAccessibilityCategory ? 1 : 2
// Define Item Size
let itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0),heightDimension: .fractionalHeight(1.0))
// Create Item
let item = NSCollectionLayoutItem(layoutSize: itemSize)
// Define Group Size
let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0),heightDimension: .estimated(150.0))
// Create Group
let group = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize,subitem: item,count: columns)
group.interItemSpacing = .fixed(10.0)
// Create Section
let section = NSCollectionLayoutSection(group: group)
// Configure Section
section.contentInsets = NSDirectionalEdgeInsets(top: 10.0,leading: 10.0,bottom: 10.0,trailing: 10.0)
section.interGroupSpacing = 10
return section
}
return layout
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)