Swift中StackView内按钮无响应问题排查
我之前也碰到过一模一样的情况!StackView本身不需要特殊配置,问题大概率出在几个容易忽略的细节上,咱们一步步排查:
检查StackView的用户交互状态:
虽然你已经开启了按钮的用户交互,但StackView的User Interaction Enabled如果被意外关闭,会直接阻断子视图的触摸响应。选中Storyboard里的StackView,在右侧Attributes Inspector面板里确认这个选项是勾选状态。验证StackView的布局约束是否有效:
有时候约束设置不当会导致StackView的实际frame异常(比如尺寸为0、位置偏移到屏幕外),看起来按钮在可视区域,但触摸根本碰不到它。你可以通过Xcode的Debug View Hierarchy工具(点击调试栏里的层级图标)查看StackView和按钮的真实布局,确认它们的frame和预期一致。排查是否有视图遮挡StackView:
检查StackView的父视图或同级视图中,有没有透明或半透明的UIView叠在StackView上方,阻断了触摸事件。同样用Debug View Hierarchy可以直观看到视图的层级关系,找到可能的遮挡视图。确认按钮的Action关联未失效:
虽然按钮移出StackView能正常工作,但拖入StackView的过程中偶尔会出现IBAction关联意外断开的情况。右键点击按钮,打开Connections Inspector面板,检查Touch Up Inside事件是否还正确关联到你的目标方法上。尝试重建StackView:
Storyboard偶尔会出现布局缓存异常的小问题,删掉当前的StackView,重新拖入一个新的UIStackView,将按钮重新添加进去并配置约束,很多时候这种“暴力”方法能解决奇怪的布局响应问题。
内容的提问来源于stack exchange,提问作者Michael Baumgärtner

