TLDR; 根据部分,我需要调整单元格的大小:
我只是在寻找:“是的,您可以通过合成布局来实现这一点,这是...”。或“否,您不能使用合成实现此功能,必须使用流布局或其他自定义布局。”
附加要求:
UITableViewAutomaticDimension
使用tableview的动态自调整功能
背景信息:
答案 0 :(得分:3)
您可以使用UICollectionViewCompositionalLayout
构建“第2节”布局。方法如下:
let layoutSize = NSCollectionLayoutSize(
widthDimension: .estimated(100),
heightDimension: .absolute(32)
)
let group = NSCollectionLayoutGroup.horizontal(
layoutSize: .init(
widthDimension: .fractionalWidth(1.0),
heightDimension: layoutSize.heightDimension
),
subitems: [.init(layoutSize: layoutSize)]
)
group.interItemSpacing = .fixed(8)
let section = NSCollectionLayoutSection(group: group)
section.contentInsets = .init(top: 0, leading: 16, bottom: 0, trailing: 16)
section.interGroupSpacing = 8
return .init(section: section)
重要的一点是,该组使用.fractionalWidth(1.0)
占用了可用宽度,但是子项具有估计的宽度。只需通过覆盖sizeThatFits(_:)
,preferredLayoutAttributesFitting(_:)
或使用“自动布局”来确保您的收藏夹视图单元格可以自动调整大小即可。结果将是一个如下所示的布局:
要在同一UICollectionViewCompositionalLayout
中使用“ section 1”和“ section 2”,只需使用init(sectionProvider:)
创建布局,在其中为当前部分标识符返回相应的NSCollectionLayoutSection
:
func createCollectionViewLayout() -> UICollectionViewCompositionalLayout {
.init(sectionProvider: { [weak self] sectionIndex, _ in
guard let sectionIdentifier = self?.dataSource.snapshot().sectionIdentifiers[sectionIndex] else { return nil }
switch sectionIdentifier {
case .section1: return self?.createSection1()
case .section2: return self?.createSection2()
}
})
}
值得注意的是,如果您的视图控制器在iOS 13+上使用默认的pageSheet
样式呈现,则此布局可能会出现一些奇怪的行为。我在这里有一个related question(使用略有不同的布局)。