iOS Swift开发中自定义UIView的UITapGestureRecognizer无法触发问题
Swift自定义UIView中UITapGestureRecognizer无法触发的问题解决
核心问题点
你提供的代码存在2个直接导致手势无法触发的问题:
- 自定义视图
MyCustomView中没有将子视图mView添加到视图层级,mView没有被渲染到界面上,自然无法响应点击事件 mView的约束配置不完整,仅设置了top和trailing两个位置约束,缺少宽高/其余边距约束,会导致mView的实际尺寸为0,即使添加到视图上也无法被点击到
修复方案
修改MyCustomView的init(frame: CGRect)方法,补充添加子视图和完整约束的逻辑即可:
override init(frame: CGRect) { super.init(frame: frame) self.widthAnchor.constraint(equalToConstant: frame.width).isActive = true self.heightAnchor.constraint(equalToConstant: frame.height).isActive = true // 补充:将mView添加到当前自定义视图的层级中 addSubview(mView) self.mView.topAnchor.constraint(equalTo: self.topAnchor, constant: 10).isActive = true self.mView.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: -20).isActive = true // 补充:给mView添加宽高约束,可根据业务需求调整数值 self.mView.widthAnchor.constraint(equalToConstant: 100).isActive = true self.mView.heightAnchor.constraint(equalToConstant: 100).isActive = true }
额外排查技巧
如果修复后仍然不响应,可以按以下步骤排查:
- 打开Xcode的
Debug View Hierarchy工具,检查mView的实际frame是否在父视图MyCustomView的bounds范围内,超出父视图范围的子视图默认无法接收点击事件 - 检查是否有其他透明视图覆盖在
mView上方,拦截了触摸事件 - 可以临时将
mView的背景色改为红色等醒目颜色,确认视图实际渲染位置符合预期
内容的提问来源于stack exchange,提问作者uditha
相关产品推荐
相关产品推荐

