在SwiftUI中使用.accessibilityLabeledPair(role:id:in:)对两个元素进行配对以实现辅助功能

t8e9dugd  于 2022-10-31  发布在  Swift
关注(0)|答案(1)|浏览(222)

在WWDC 19的"Accessibility in SwiftUI"会话中,演示者说(20分钟):“在即将推出的SwiftUI种子中,您将能够(...)在左侧的标签和右侧的弹出按钮之间建立连接。”
检查可用的API,我假设这是用.accessibilityLabeledPair(roleemoji symbols:idin:)修饰符完成的。我还没能让它工作。在我看来,这应该和Android中的labelFor类似?有人成功地使用过这个修饰符吗?
使用类似下面的一些代码,我首先为文本视图指定标签角色,为按钮指定内容角色。然后为这两个元素指定相同的ID和名称空间。我希望VoiceOver将这两个元素作为一个元素来关注,并将辅助功能标签作为文本视图中的文本。相反,对我来说,这与我不应用修饰符时的行为完全相同。VoiceOver首先关注文本,向右滑动后,它会聚焦在按钮上。我是不是误解了这应该如何工作?

import SwiftUI

struct ContentView: View {
    @Namespace var namespace
    @State private var isOn = false

    var body: some View {
        HStack {
            Text("I agree on the terms and conditions")
                .accessibilityLabeledPair(role: .label, id: "aPair", in: namespace)
            Button {
                isOn = !isOn
            } label: {
                isOn ? Image(systemName: "checkmark.circle.fill") : Image(systemName: "circle")
            }
            .accessibilityLabeledPair(role: .content, id: "aPair", in: namespace)
        }
    }
}

谢谢大家!

ccrfmcuu

ccrfmcuu1#

相信你需要在HStack上使用.accessibilityRepresentation修饰符,现在你的第二个accessibilityLabeledPair应该在按钮上而不是在HStack上。

相关问题