0

我的作曲布局有以下布局

func createLayout() -> UICollectionViewLayout {
    let layout = UICollectionViewCompositionalLayout {
        (sectionIndex: Int, layoutEnvironment: NSCollectionLayoutEnvironment) -> NSCollectionLayoutSection? in

        let dayItemSize = NSCollectionLayoutSize(widthDimension: .absolute(74), heightDimension: .fractionalHeight(1))
        // 2. Setup media group
        let dayItem = NSCollectionLayoutItem(layoutSize: dayItemSize)
        let dayGroupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0),heightDimension: .fractionalHeight(1.0))
        let dayGroup = NSCollectionLayoutGroup.horizontal(layoutSize: dayGroupSize, subitems: [dayItem])
        let interitemSpacing = CGFloat(10)
        dayGroup.interItemSpacing = .fixed(interitemSpacing)
        let section = NSCollectionLayoutSection(group: dayGroup)
        section.orthogonalScrollingBehavior = .continuous
        return section
    }
    return layout
}

然后我的 collectionView 中有 30 个“日”项。

  fileprivate func makeDataSource() -> DataSource {
        let dataSource = DataSource(
            collectionView: collectionView,
            cellProvider: { (collectionView, indexPath, YearMonthDay) ->
              UICollectionViewCell? in
                let cell = collectionView.dequeueReusableCell(withReuseIdentifier: TimelineDayCell.identifier, for: indexPath) as? TimelineDayCell
                cell?.configure(with: YearMonthDay)
                cell?.dayLabel.text = String(indexPath.section)+","+String(indexPath.row)
                return cell
            })
        return dataSource
    }
    func configureDataSource() {
        self.collectionView!.register(TimelineDayCell.nib, forCellWithReuseIdentifier: TimelineDayCell.identifier)
    }
    func applySnapshot(animatingDifferences: Bool = true) {
      // 2
      var snapshot = DataSourceSnapshot()
        snapshot.appendSections([.main])
        snapshot.appendItems(days) # 30 of these
      dataSource.apply(snapshot, animatingDifferences: animatingDifferences)
    }

我的 UIcollectionViewController 覆盖了屏幕的整个宽度。我在屏幕上的单元格如下所示:

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

在此处输入图像描述

单元格上的文本是它们的索引路径。您可以看到 0-4、5-9 之间的间距是均匀的,然后在边缘 4-5 和 9-10 上,它是不同的。我相信这是因为它是屏幕之间的“边缘”。但我能做些什么呢?

我也尝试过不使用正交滚动行为,只设置布局配置的滚动方向

   let config = UICollectionViewCompositionalLayoutConfiguration()
   config.scrollDirection = .horizontal
   layout.configuration = config
   return layout

它似乎达到了同样的目的。这里有什么建议吗?

编辑:似乎这种行为是基于组的大小。例如,当我使用 let dayGroup = NSCollectionLayoutGroup.horizo​​ntal(layoutSize: dayGroupSize, subitem: dayItem, count: 30) 时,它使所有项目彼此相邻,如下所示:

在此处输入图像描述

现在有 30 个单独的项目。请注意它如何自动间隔它们之间的距离,以便它可以将 30 放入 1 个屏幕宽度。因此,它仍然试图将 1 组中的所有项目强制到一个屏幕中,这是我不想要的行为。我希望该组是整个内容大小的宽度并且可以滚动。

4

1 回答 1

1

好的,我解决了。这与小组规模有关。我有 let dayGroupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0),heightDimension: .fractionalHeight(1.0))

项目间距在组项目之间。组大小是我的窗口大小。所以我需要使组大小等于整个内容的大小(例如比窗口大。

于 2020-10-05T23:16:22.867 回答