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

如何禁用CollectionView组合布局中分区的水平滚动回弹?

解决Compositional Layout中CollectionView分区水平回弹无法禁用的问题

你遇到的问题根源在于:使用orthogonalScrollingBehavior的分区,其水平滚动是由独立的内部滚动容器管理的,直接设置主CollectionView的bounces、alwaysBounceHorizontal等属性,只会作用于整体的垂直滚动,对分区的水平滚动容器无效。

解决方案:通过正交滚动配置禁用分区回弹

在创建分区时,不要直接使用section.orthogonalScrollingBehavior = .paging,而是用NSCollectionLayoutSectionOrthogonalScrollingConfiguration来配置滚动行为,明确禁用回弹:

func createCompositionalLayout() {
    let layout = UICollectionViewCompositionalLayout { sectionIndex, _ in
        let itemSize = NSCollectionLayoutSize(widthDimension: .absolute(UIScreen.main.bounds.width), heightDimension: .absolute(UIScreen.main.bounds.height))
        let item = NSCollectionLayoutItem(layoutSize: itemSize)

        let group = NSCollectionLayoutGroup.horizontal(layoutSize: itemSize, subitems: [item])
        group.interItemSpacing = .fixed(0)

        let section = NSCollectionLayoutSection(group: group)
        section.contentInsets = NSDirectionalEdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0)
        
        // 配置正交滚动,禁用回弹并保留分页
        let scrollingConfig = NSCollectionLayoutSectionOrthogonalScrollingConfiguration()
        scrollingConfig.scrollDirection = .horizontal
        scrollingConfig.bounces = false // 关键:关闭水平回弹
        scrollingConfig.pagingBehavior = .page // 保持原有的分页效果
        section.orthogonalScrollingConfiguration = scrollingConfig
        
        return section
    }
    collectionView.collectionViewLayout = layout
}

保留垂直方向的回弹禁用设置

继续保留你原来对主CollectionView的垂直滚动设置,确保整体垂直方向无回弹:

collectionView.bounces = false
collectionView.alwaysBounceVertical = false
collectionView.contentInsetAdjustmentBehavior = .never
collectionView.isDirectionalLockEnabled = true

这样设置后,每个分区的水平滚动就不会有回弹效果,同时垂直方向的禁用也能正常生效。

内容的提问来源于stack exchange,提问作者Anastasia Veremiichyk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 19:50:11