我的作曲布局有以下布局
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.horizontal(layoutSize: dayGroupSize, subitem: dayItem, count: 30) 时,它使所有项目彼此相邻,如下所示:
现在有 30 个单独的项目。请注意它如何自动间隔它们之间的距离,以便它可以将 30 放入 1 个屏幕宽度。因此,它仍然试图将 1 组中的所有项目强制到一个屏幕中,这是我不想要的行为。我希望该组是整个内容大小的宽度并且可以滚动。