Jos*_*old 7 ios uicollectionview swift uicollectionviewcompositionallayout uicollectionviewdiffabledatasource
我有一个UICollectionViewDiffableDataSource这样的:
var data:UICollectionViewDiffableDataSource<Section, Message>!
Run Code Online (Sandbox Code Playgroud)
我像这样定义节标题的布局:
let header = NSCollectionLayoutBoundarySupplementaryItem(
layoutSize: .init(widthDimension: .fractionalWidth(1.0), heightDimension: .estimated(10)),
elementKind: UICollectionView.elementKindSectionHeader,
alignment: .top
)
section.boundarySupplementaryItems = [header]
Run Code Online (Sandbox Code Playgroud)
最后,为了返回我的标头,我有一个返回UICollectionReusableView类似以下内容的函数:
func setupHeaderData() {
data.supplementaryViewProvider = { collectionView, kind, indexPath in
return DateStampBuilder(data: self.data, style: self.style).build(collectionView: collectionView, kind: kind, indexPath: indexPath)
}
}
Run Code Online (Sandbox Code Playgroud)
很棒的是:我可以在我的UICollectionView.
我想要什么:我如何可以选择不显示特定部分的特定标题?
当我尝试nil在以下函数中返回时:
data.supplementaryViewProvider = { collectionView, kind, indexPath in
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'the view returned from -collectionView:viewForSupplementaryElementOfKind:atIndexPath (UICollectionElementKindSectionHeader,<NSIndexPath: 0xb461f3e1dd0c21dc> {length = 2, path = 0 - 0}) was not retrieved by calling -dequeueReusableSupplementaryViewOfKind:withReuseIdentifier:forIndexPath: or is nil ((null))'
Run Code Online (Sandbox Code Playgroud)
我对如何“可选”返回某个部分的标题的唯一想法是注册另一个高度为零的标题视图,并在我根本不想返回任何标题时返回此标题。
但对我来说,这似乎是一种有点混乱的方法,如果我可以nil在不显示标题时返回,那就会干净得多。
我究竟做错了什么?
感谢您的帮助!
sch*_*ler 13
这应该在为 collectionView 创建布局时完成。以下是有关如何使用以下方法执行此操作的示例UICollectionLayoutListConfiguration:
let sectionProvider = { [weak self] (sectionIndex: Int, layoutEnvironment: NSCollectionLayoutEnvironment) -> NSCollectionLayoutSection? in
var section: NSCollectionLayoutSection
var listConfiguration = UICollectionLayoutListConfiguration(appearance: .insetGrouped)
if condition {
listConfiguration.headerMode = .supplementary
} else {
listConfiguration.headerMode = .none
}
section = NSCollectionLayoutSection.list(using: listConfiguration, layoutEnvironment: layoutEnvironment)
return section
}
let layout = UICollectionViewCompositionalLayout(sectionProvider: sectionProvider)
collectionView.setCollectionViewLayout(layout, animated: true)
Run Code Online (Sandbox Code Playgroud)
您的条件显然可以绑定到您的数据源和部分索引,这样您就不会与动态创建的部分不同步。
| 归档时间: |
|
| 查看次数: |
5464 次 |
| 最近记录: |