为什么hitTest(_:with:)无法检测到代码方式添加的UIImageView?
问题原因
核心差异来源于 UIImageView 和普通 UIView 的默认交互属性配置:
UIImageView实例默认的isUserInteractionEnabled属性值为false,而普通UIView该属性默认值为truehitTest(_:with:)遍历视图层级时,会直接跳过用户交互关闭、隐藏、透明度低于0.01的视图,不会将这类视图作为点击检测的结果返回
你在 Interface Builder 中创建的 tag 为2的 UIImageView 能正常被检测到,是因为你在IB配置中手动勾选了「User Interaction Enabled」选项,开启了用户交互;而代码创建的 tag 为4的 UIImageView 没有主动开启该属性,所以会被hitTest逻辑跳过。
修复方案
在代码初始化 b2 的逻辑中,主动开启用户交互即可:
b2 = UIImageView(frame: CGRect(x: 75, y: 75, width: 80, height: 80)) b2.backgroundColor = .green b2.tag = 4 b2.isUserInteractionEnabled = true // 新增这行开启用户交互 g2.addSubview(b2)
修改后点击绿色区域就会正常返回tag为4的UIImageView实例。
内容的提问来源于stack exchange,提问作者Carl
相关产品推荐
相关产品推荐

