如何在Xcode中设置ScrollView仅允许垂直滚动
ScrollView意外支持横向滚动的修复方案
UIScrollView的滚动范围由contentSize属性决定,即使你已经将ScrollView本身的leading、trailing约束设为0,只要内部内容的宽度超出ScrollView自身的可视宽度,就会产生横向滚动的空间,你看到的红色边缘提示就是内容超出容器的系统提示。
- 配置内容容器的宽度约束:
给ScrollView内部添加一个统一的内容容器视图,将该容器的leading、trailing、top、bottom四边全部约束到ScrollView的Content Layout Guide对应边,同时新增约束,让容器的宽度等于ScrollView Frame Layout Guide的宽度,这一步会直接固定横向内容宽度和ScrollView可视宽度一致,从根源上避免横向滚动。 - 排查子视图约束溢出:
检查所有内嵌子视图的宽度约束、leading/trailing边距约束,是否存在固定宽度大于ScrollView宽度、边距常量为负的情况;如果约束是相对安全区(Safe Area)设置的,可将约束关联对象改为父视图,避免安全区边距导致内容溢出。 - 代码层面兜底设置:
如果是UIKit开发,可添加以下代码强制关闭横向滚动相关属性:
// 隐藏横向滚动指示器 scrollView.showsHorizontalScrollIndicator = false // 关闭横向回弹效果 scrollView.alwaysBounceHorizontal = false // 强制固定contentSize宽度等于ScrollView自身宽度 scrollView.contentSize = CGSize(width: scrollView.bounds.width, height: 你的内容总高度)
如果是SwiftUI开发,直接指定ScrollView的滚动轴为垂直方向即可:
ScrollView(.vertical, showsIndicators: false) { // 所有内嵌内容代码 }


内容的提问来源于stack exchange,提问作者albertski
相关产品推荐
相关产品推荐

