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

如何让VoiceOver按从上到下顺序读取SwiftUI横向滚动视图内容

解决SwiftUI中VoiceOver横向滚动视图的访问顺序问题

你的问题核心是水平HStack的默认VoiceOver遍历逻辑是按横向布局顺序读取(先读每个VStack的第一个元素,再第二个),而你需要按纵向读完单个VStack所有元素后再切换到下一个。以下是几种可行的解决方案:

方案一:使用accessibilitySection(iOS 15+ 推荐)

accessibilitySection会将标记的视图视为独立的访问区域,VoiceOver会优先遍历完当前区域内的所有元素,再进入下一个区域。代码修改如下:

ScrollView(.horizontal) {
    HStack {
        VStack {
            Text("A")
            Text("B")
            Button(action: {}, label: { Text("C") })
        }
        .accessibilitySection()
        
        VStack {
            Text("D")
            Text("E")
            Button(action: {}, label: { Text("F") })
        }
        .accessibilitySection()
    }
}

方案二:使用accessibilityElement(children: .contain)(兼容iOS 14及以下)

与你之前尝试的.combine不同,.contain会保留子视图的所有可访问性特征(比如按钮的文本标签),同时将父视图作为容器,让VoiceOver先遍历容器内的所有子元素:

ScrollView(.horizontal) {
    HStack {
        VStack {
            Text("A")
            Text("B")
            Button(action: {}, label: { Text("C") })
        }
        .accessibilityElement(children: .contain)
        
        VStack {
            Text("D")
            Text("E")
            Button(action: {}, label: { Text("F") })
        }
        .accessibilityElement(children: .contain)
    }
}

方案三:手动指定访问顺序(精细控制场景)

通过accessibilityOrder给每个元素设置顺序值,VoiceOver会按值从小到大依次读取:

ScrollView(.horizontal) {
    HStack {
        VStack {
            Text("A")
                .accessibilityOrder(1)
            Text("B")
                .accessibilityOrder(2)
            Button(action: {}, label: { Text("C") })
                .accessibilityOrder(3)
        }
        
        VStack {
            Text("D")
                .accessibilityOrder(4)
            Text("E")
                .accessibilityOrder(5)
            Button(action: {}, label: { Text("F") })
                .accessibilityOrder(6)
        }
    }
}

内容的提问来源于stack exchange,提问作者Daniel T.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 07:53:20