UICollectionViewCompositionalLayout,其组宽度小于节宽度和分页

问题描述

在每个试图重新创建AppStore布局的教程中,我都会看到这种代码

@H_404_3@...
let group = NSCollectionLayoutGroup.horizontal(layoutSize: NSCollectionLayoutSize(widthDimension: .fractionalWidth(0.95),heightDimension: .absolute(300)),subitems: [item])
let section = NSCollectionLayoutSection(group: group)
section.orthogonalScrollingBehavior = .groupPaging
...

重要的是组分数宽度

我还注意到,在水平滚动该组时会出现一些奇怪的滚动伪像:有时,当我向左拖动第一个项目并释放时,它只是跳回中心而没有动画。或者,当我滚动到最后一个项目,然后尝试向右滚动更多时,它会弹回到第一个项目。

这真的很奇怪,看起来像是UICollectionViewCompositionalLayout实现中的错误或此+ iOS版本的组合。有没有人遇到类似的问题,也许知道解决方法?我看到每种类型的页面调度都在发生这种情况。

编辑:我刚刚了解到此问题是iOS 14特有的,我在iOS 13.7模拟器上测试了我的应用程序,并且该应用程序在那可以正常工作。

解决方法

在向右滚动并跳到倒数第二个项目的最后一个项目上,我也有同样的问题。

,

在我的情况下,我无法完全滚动到最后一个项目,所以我尝试为该组设置负尾随插入并且它起作用了:

let itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1),heightDimension: .estimated(55))
let item = NSCollectionLayoutItem(layoutSize: itemSize)
    
let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(0.75),heightDimension: .estimated(55 * 3 + 16))
let group = NSCollectionLayoutGroup.vertical(layoutSize: groupSize,subitem: item,count: 3)
group.interItemSpacing = .fixed(.centi)
// Here
group.contentInsets = NSDirectionalEdgeInsets(top: 0,leading: 0,bottom: 0,trailing: -view.bounds.width * 0.25)
    
let section = NSCollectionLayoutSection(group: group)
section.orthogonalScrollingBehavior = .groupPaging