UICollectionViewCompositionalLayout内容尺寸异常,无法滚动至屏幕外项
UICollectionViewCompositionalLayout 内容尺寸异常导致无法滚动到屏幕外项的解决方法
问题场景
原使用如下代码创建横向滚动的UICollectionView布局:
private lazy var layout: UICollectionViewCompositionalLayout = { let margin = 8.0 let itemSize = NSCollectionLayoutSize( widthDimension: .fractionalWidth(1.0), heightDimension: .fractionalHeight(1.0) ) let item = NSCollectionLayoutItem(layoutSize: itemSize) let groupSize = NSCollectionLayoutSize( widthDimension: .estimated(56), heightDimension: .fractionalHeight(1.0) ) let group = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize, subitems: [item]) let section = NSCollectionLayoutSection(group: group) section.contentInsets = NSDirectionalEdgeInsets(top: .zero, leading: margin, bottom: .zero, trailing: margin) section.orthogonalScrollingBehavior = .continuous return UICollectionViewCompositionalLayout(section: section) }()
出现异常:UICollectionView的内容尺寸始终与自身尺寸一致,即便列表项已经超出视图范围,导致无法通过代码滚动到屏幕外的项。尝试修改项和组的widthDimension、调整contentInsets均无效。
解决方法
将横向组的创建方式改为垂直组(count设为1),同时修改正交滚动行为为.continuousGroupLeadingBoundary:
// 替换原group创建代码 let group = NSCollectionLayoutGroup.vertical(layoutSize: groupSize, subitem: item, count: 1) // 修改滚动行为 section.orthogonalScrollingBehavior = .continuousGroupLeadingBoundary
修改后,UICollectionView会正确计算内容总尺寸,支持正常滚动到屏幕外的列表项。
内容的提问来源于stack exchange,提问作者dub.raf
相关产品推荐
相关产品推荐

