You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 13:03:10