SwiftUI子视图继承父视图无障碍标识符,如何设置父子不同标识?
解决方案
要实现父视图拥有独立的无障碍标识符"car",同时子视图保留各自的无障碍标识符,你需要调整无障碍元素的层级结构,避免直接修改CarSwiftUIView的无障碍属性,而是通过容器视图承载父级的无障碍设置:
private var carStack: some View { // 使用 Group 或其他布局容器包裹目标视图 Group { CarSwiftUIView(viewModel: viewModel.carViewModel) } .accessibilityIdentifier("car") .accessibilityElement(children: .contain) }
关键说明
.accessibilityElement(children: .contain)会将容器标记为无障碍容器,既保留容器自身的无障碍标识,又不覆盖内部子视图的独立无障碍属性(包括各自的标识符)。- 父容器的
accessibilityIdentifier("car")仅属于容器本身,不会被CarSwiftUIView及其子视图继承。 - 确保
CarSwiftUIView内部的子视图已经正确设置了各自的accessibilityIdentifier,这些设置会被无障碍框架正常识别。
如果需要父容器在无障碍播报中作为整体存在,同时允许子视图被单独聚焦,.contain是最合适的选项——它兼顾了父级标识的独立性和子视图的无障碍属性完整性。
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

