在WWDC 19的"Accessibility in SwiftUI"会话中,演示者说(20分钟):“在即将推出的SwiftUI种子中,您将能够(...)在左侧的标签和右侧的弹出按钮之间建立连接。”
检查可用的API,我假设这是用.accessibilityLabeledPair(rolein:)修饰符完成的。我还没能让它工作。在我看来,这应该和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)
}
}
}
谢谢大家!
1条答案
按热度按时间ccrfmcuu1#
相信你需要在HStack上使用
.accessibilityRepresentation
修饰符,现在你的第二个accessibilityLabeledPair应该在按钮上而不是在HStack上。