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
相关产品推荐
相关产品推荐

