【问题标题】:Section Header For Particular Section Using UICollectionLayoutListConfiguration使用 UICollectionLayoutListConfiguration 的特定部分的部分标题
【发布时间】:2021-12-18 11:28:31
【问题描述】:

我有一个UICollectionView,有两个部分使用UICollectionLayoutListConfiguration。我只想为其中一个特定部分设置一个标题。

收藏视图

lazy var collectionView: UICollectionView = {
    var list = UICollectionLayoutListConfiguration(appearance: .insetGrouped)
    list.headerMode = .supplementary
    let layout = UICollectionViewCompositionalLayout.list(using: list)
    let view = UICollectionView(frame: .zero, collectionViewLayout: layout)
    // REGISTER CELLS ETC...
    return view
}()

数据源

dataSource.supplementaryViewProvider = { [weak self] collectionView, kind, indexPath in
    guard let self = self else { return nil }
    
        
    if let section = Section(rawValue: indexPath.section) {
        switch section {
        case .topSection:
            // I DO NOT HAVE ANY HEADER FOR THIS SECTION
        case .bottomSection:
            switch kind {
            case UICollectionView.elementKindSectionHeader:
                // RETURN SECTION HEADER HERE
            case UICollectionView.elementKindSectionFooter:
                // I DO NOT HAVE ANY FOOTERS
            default:
                fatalError("SOMETHING BAD HAPPENED")
            }
        }
    }

接下来我可以尝试什么来解决这个问题?

【问题讨论】:

    标签: ios swift uicollectionview uicollectionviewcompositionallayout uicollectionlayoutlistconfiguration


    【解决方案1】:

    解决了。

    我需要为UICollectionViewCompositionalLayout 中的每个部分类型返回一个NSCollectionLayoutSection,这无法在数据源中完成。

    private func setUpLayout() -> UICollectionViewLayout {
            let layout = UICollectionViewCompositionalLayout { [unowned self] sectionIndex, layoutEnvironment in
                let section = Section(rawValue: sectionIndex)
                switch section {
                case .task:
                    return self.setUpSection(layoutEnvironment: layoutEnvironment)
                case .project:
                    return self.setUpHeaderSection(layoutEnvironment: layoutEnvironment)
                case .completed:
                    return self.setUpHeaderSection(layoutEnvironment: layoutEnvironment)
                default:
                    return self.setUpHeaderSection(layoutEnvironment: layoutEnvironment)
                }
            }
            return layout
        }
        
    private func setUpSection(layoutEnvironment: NSCollectionLayoutEnvironment) -> NSCollectionLayoutSection {
            var listConfiguration = UICollectionLayoutListConfiguration(appearance: .insetGrouped)
            listConfiguration.headerMode = .none
            return NSCollectionLayoutSection.list(using: listConfiguration, layoutEnvironment: layoutEnvironment)
        }
        
    private func setUpHeaderSection(layoutEnvironment: NSCollectionLayoutEnvironment) -> NSCollectionLayoutSection {
            var listConfiguration = UICollectionLayoutListConfiguration(appearance: .insetGrouped)
            listConfiguration.headerMode = .supplementary
            return NSCollectionLayoutSection.list(using: listConfiguration, layoutEnvironment: layoutEnvironment)
        }
    

    【讨论】:

      【解决方案2】:

      将标题高度设置为零。对于“referenceSizeForHeaderInSection”中的特定部分

      【讨论】:

      • 我使用的是 UICollectionViewDiffableDataSource 而不是传统的 UICollectionViewDataSource
      猜你喜欢
      • 1970-01-01
      • 2012-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-18
      • 2015-04-22
      • 2018-08-12
      相关资源
      最近更新 更多