iOS 15及以上版本accessibilityIdentifier表现异常问题咨询
解决方案:恢复iOS 14风格的嵌套无障碍容器
问题原因
iOS 15及后续版本中,SwiftUI对无障碍系统做了优化:当连续对同一视图应用多个accessibilityElement(children: .contain)修饰符时,系统会自动合并这些冗余的无障碍容器,仅保留最外层容器,这就是内层XCUIElementTypeOther节点消失的原因。
修复方法
要让两个无障碍容器都被保留,需要将内层修饰符作用在独立的视图层级上,而非链式叠加在同一个视图上。最直接的方式是用Group包裹内层视图,让两层accessibilityElement分别绑定到不同的容器节点:
struct RootView: View { var body: some View { Group { VStack { Text("some text") Text("more text") } // wrapper 1:作用在VStack外层的Group子视图 .accessibilityElement(children: .contain) .accessibilityIdentifier("ID 1111111111111") } // wrapper 2:作用在最外层Group .accessibilityElement(children: .contain) .accessibilityIdentifier("ID 2222222222222") } }
修改后,iOS新版本的无障碍检查器(包括Appium Inspector)会生成与iOS 14一致的嵌套结构:外层是标记为ID 2222222222222的XCUIElementTypeOther,内层包含标记为ID 1111111111111的XCUIElementTypeOther,最下层为文本元素。
补充说明
如果不想使用Group,也可以替换为其他能创建独立视图层级的容器(如ZStack、HStack),核心逻辑是让两个accessibilityElement修饰符分别绑定到不同的视图节点,避免系统合并冗余容器。
内容的提问来源于stack exchange,提问作者Claudiu
相关产品推荐
相关产品推荐

