Xcode 13 Swift 滚动视图(Scroll View)内按钮无响应问题求助
Xcode 13 Storyboard 搭建 ScrollView 后内部按钮无响应的常见原因
- Content View 尺寸未正确配置:通过 GUI 搭建 ScrollView 时,必须给 ScrollView 内部的根普通视图设置上下左右四个边距约束绑定到 ScrollView 的
Content Layout Guide,同时还要设置宽度、高度约束(如果仅需要单向滚动,可将对应方向的尺寸和 ScrollView 的Frame Layout Guide绑定)。如果未正确配置约束,该根普通视图的实际运行尺寸可能被计算为0,按钮即使在画布上可见,点击事件也会被尺寸异常的父视图拦截,无法传递到按钮。 - 父视图交互开关被关闭:检查 ScrollView、内部普通视图的
User Interaction Enabled复选框是否被误取消勾选,父视图关闭交互后,所有内部子控件都无法接收点击事件。 - 按钮超出父视图响应区域:如果按钮的实际运行 frame 超出了父视图(内部普通视图)的 bounds,父视图开启
Clips To Bounds时,超出部分不会响应点击,按钮完全超出父视图范围时会彻底无响应。 - 上层视图拦截点击事件:检查视图层级中是否有其他透明视图覆盖在按钮或内部普通视图上方,开启了交互的透明视图会拦截所有点击事件,不会透传到下层控件。
- ScrollView 手势属性被误修改:如果 ScrollView 的
Delays Content Touches被关闭、Cancels Touches In View被开启,点击事件会优先被 ScrollView 识别为滚动手势,不会传递给内部子控件。
快速排查方法:运行项目后点击 Xcode Debug Bar 的
Debug View Hierarchy按钮,进入视图层级调试界面,选中对应按钮即可查看父视图实际尺寸、是否存在上层遮挡视图等问题。
内容的提问来源于stack exchange,提问作者DrZ
相关产品推荐
相关产品推荐

