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

为什么hitTest(_:with:)无法检测到代码方式添加的UIImageView?

问题原因

核心差异来源于 UIImageView 和普通 UIView 的默认交互属性配置:

  • UIImageView 实例默认的 isUserInteractionEnabled 属性值为 false,而普通 UIView 该属性默认值为 true
  • hitTest(_: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:39:02