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

SwiftUI中如何让视图对VoiceOver隐藏但可被UIAutomation识别?

SwiftUI 实现视图对VoiceOver不可访问但可被UITest识别

要实现这个需求,核心是区分无障碍(VoiceOver)可见性和**测试标识(accessibilityIdentifier)**的独立作用:

  • accessibilityHidden(true) 会将视图从无障碍元素树中移除,完全屏蔽VoiceOver的识别,这正是你需要的「对VoiceOver不可访问」的效果——accessibilityInspector中看不到该元素是正常的,因为它展示的就是VoiceOver能识别的无障碍元素集合。
  • accessibilityIdentifier 是独立于无障碍系统的测试标记,即使视图不在无障碍树中,UITest依然可以通过这个标识定位到元素。

验证你的代码有效性

你当前的代码已经满足需求,只需在UITest中验证即可:

// UITest 代码示例
let app = XCUIApplication()
app.launch()

// 通过accessibilityIdentifier定位图片元素
let closeImage = app.images["image"]
// 断言元素存在
XCTAssert(closeImage.exists)

替代方案(精细控制场景)

如果你希望元素在无障碍树中存在,但VoiceOver不对其进行朗读或交互,可以用以下方式实现:

Image(.close)
    .resizable()
    .frame(width: 10, height: 10)
    .accessibilityLabel(nil) // 移除朗读标签
    .accessibilityTraits(.none) // 移除所有交互特性
    .accessibilityIdentifier("image")

这种方式下,accessibilityInspector中能看到元素,但VoiceOver不会处理它,同时UITest依然可以正常识别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 23:22:39