如何禁用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
相关产品推荐
相关产品推荐

