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

自定义UIView中UIButton点击无响应且父视图背景不显示问题排查

问题原因说明

1. 按钮点击无响应原因

在CustomButtonView的initWithFrame方法中,你手动设置了self.userInteractionEnabled = NO,关闭了父视图的用户交互能力。iOS触摸事件传递规则为:事件从窗口逐层向下传递到响应者,若父视图关闭用户交互,所有子视图都无法接收触摸事件,哪怕子视图单独设置userInteractionEnabled = YES也不会生效。

2. 自定义视图红色背景不显示原因

两个因素共同作用导致该问题:

  • 你给CustomButtonView设置了translatesAutoresizingMaskIntoConstraints = NO,但没有给它添加任何固定宽高约束,也没有通过子视图约束撑满父视图,此时CustomButtonView的尺寸默认由子视图的固有内容尺寸、子视图和父视图的约束共同决定。
  • 你仅给按钮添加了topAnchor和leadingAnchor与父视图对齐的约束,没有给按钮添加宽高约束,也没有约束按钮的底部、尾部和父视图对齐。UIButton本身存在根据文字、字体计算的固有内容尺寸,此时CustomButtonView的尺寸会和按钮尺寸完全一致,绿色按钮刚好完全覆盖红色父视图背景,因此看不到红色。

修复方案

  • 移除CustomButtonView中self.userInteractionEnabled = NO这行代码,恢复父视图的用户交互能力。
  • 给CustomButtonView添加固定宽高和位置约束,示例代码:
// 在ViewController的viewDidLoad方法中,添加customButtonView之后补充约束
[_customButtonView.widthAnchor constraintEqualToConstant:100].active = YES;
[_customButtonView.heightAnchor constraintEqualToConstant:100].active = YES;
[_customButtonView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor constant:20].active = YES;
[_customButtonView.topAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.topAnchor constant:20].active = YES;
  • 如果需要按钮撑满自定义视图,补充按钮的宽高约束即可:
// 在CustomButtonView的initWithFrame方法中,补充按钮约束
[_button.widthAnchor constraintEqualToAnchor:self.widthAnchor].active = YES;
[_button.heightAnchor constraintEqualToAnchor:self.heightAnchor].active = YES;
  • 如果需要露出红色背景,给按钮添加带边距的约束即可,比如上下左右各缩进10pt,红色就会作为按钮边框露出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:15:02