本文将通过为视图添加标签,为iOS的旁白功能提供识别标签。
旁白开启功能:
视图演示
struct ContentView: View {
let pictures = [
"apollo7",
"apollo8",
"apollo9",
"apollo10",
]
@State private var selectedPicture = Int.random(in: 0...3)
var body: some View {
Image(pictures[selectedPicture])
.resizable()
.scaledToFit()
.onTapGesture {
selectedPicture = Int.random(in: 0...3)
}
}
}
当开启“旁白”功能后,点击图片会阅读文件名称以及其他的英文,这会让使用人使用应用的过程中感觉困惑。
因此,在这里使用改进应用可访问性的修饰符.accessibilityLabel() 和 .accessibilityHint(),主要为屏幕阅读器(如 iOS 上的 VoiceOver)提供更清晰的信息,帮助用户理解界面元素的用途或内容。
accessibilityLabel()
功能:
accessibilityLabel() 为视图设置一个简短的描述,用于告诉用户界面元素的主要用途或内容。
参数类型:
接受一个 String 或 LocalizedStringKey 作为参数。
使用场景:
适用于按钮、图像等控件,为其提供可被屏幕阅读器识别的描述。
Image(pictures[selectedPicture])
.accessibilityLabel("Delete") // 提供简短的替代文本,告诉用户此按钮用于删除
屏幕阅读器会朗读 “Delete”,而不是Image的默认描述。
accessibilityHint()
功能:
accessibilityHint() 提供额外的、更加详细的上下文说明,告诉用户该控件的操作后会发生什么。它通常用于补充 accessibilityLabel() 的信息。
参数类型:
接受一个 String 或 LocalizedStringKey 作为参数。
使用场景:
适用于控件,提供更多操作后可能发生的行为或结果的说明。
Button(action: {
print("Button tapped")
}) {
Text("Submit")
}
.accessibilityLabel("Submit Form") // 提供简短描述
.accessibilityHint("Submits the form and sends your data") // 提供操作的后果或结果的详细说明
在此示例中,屏幕阅读器会朗读 “Submit Form”,然后是 “Submits the form and sends your data”。
两者配合使用的好处
1、提高可访问性:
帮助用户明确控件的用途和操作结果,特别适合有视力障碍或依赖屏幕阅读器的用户。
2、增强用户体验:
在语音提示中更直观地传达设计意图,减少歧义。
改进视图
在视图演示代码中,添加一个标签数组,用于图像的文字描述:
let labels = [
"Tulips",
"Frozen tree buds",
"Sunflowers",
"Fireworks",
]
使用accessibilityLabel可访问性标签,将图片索引绑定到标签上:
.accessibilityLabel(labels[selectedPicture])
修改后,重新点击图片,iOS系统就会读取正确的标签,而非图像的名称。
添加或删除特征的视图标签
给图像添加点击手势时:
Image(pictures[selectedPicture])
.onTapGesture {
selectedPicture = Int.random(in: 0...3)
}
图像实际上也是一个按钮,因此可以添加 accessibilityAddTraits来增添旁白的阅读细节:
.accessibilityAddTraits(.isButton)
旁白在阅读时,会阅读文字标签+Button+Img等旁白内容。
也可以删除图像特征:
.accessibilityRemoveTraits(.isImage)
以便让用户知道图像内容以及图像是一个按钮的信息。
如果只是使用按钮,而非带有点击手势的图像时,应该使用Button按钮:
Button {
selectedPicture = Int.random(in: 0...3)
} label: {
Image(pictures[selectedPicture])
.resizable()
.scaledToFit()
}
.accessibilityLabel(labels[selectedPicture])
这样就无需添加或删除特征。
accessibilityAddTraits()
功能:
用于为视图添加一个或多个无障碍特性,这些特性会影响屏幕阅读器对该视图的描述或行为。
参数:
接受一个或多个 AccessibilityTraits,可以是单个值或使用逗号分隔的组合。
常见特性:
.button:使视图被识别为按钮。
.selected:表示视图当前处于选中状态。
.header:表明视图是一个章节或页面的标题。
.link:使视图被识别为超链接。
Button("Click Me") {
print("Button tapped")
}
.accessibilityAddTraits(.isSelected) // 表示按钮处于选中状态
屏幕阅读器会朗读 “selected”,表明该按钮被选中。
accessibilityRemoveTraits()
功能:
用于从视图中移除一个或多个默认的无障碍特性。如果视图自带某些行为,而这些行为在上下文中不适合,可以通过此修饰符将其移除。
参数:
接受一个或多个 AccessibilityTraits。
Button("Tap Me") {
print("Button tapped")
}
.accessibilityRemoveTraits(.isButton) // 使按钮不再被识别为按钮
屏幕阅读器将不再将该视图视为按钮,而是作为普通文本朗读。
AccessibilityTraits 的常见值
1).button:表示视图是一个按钮。
2).link:表示视图是一个超链接。
3).header:表示视图是一个标题,如页面或分区标题。
4).isSelected:表示视图处于选中状态。
5).isHidden:表示视图对屏幕阅读器是隐藏的。
6).playsSound:表示视图的交互会触发声音效果。
7).staticText:表示视图是静态文本(不可交互)。
8).updatesFrequently:表示视图的内容会频繁更新。
9).causesPageTurn:表示视图会触发页面翻转。
总结
accessibilityLabel() 是 “这是什么” 的简短说明。
accessibilityHint() 是 “使用它会发生什么” 的详细说明。
accessibilityAddTraits() 和 accessibilityRemoveTraits() 是增强视图无障碍功能的高级工具。
它们允许为屏幕阅读器用户定制视图的行为和语义,使应用更加易用和包容。
通过合理使用这些修饰符,可以确保界面元素在不同场景下都能清晰地传达其功能和状态。
个人心得
Apple的旁白功能帮助更多的人使用手机,让我想起学习HTML时,也有学习W3C的无障碍原则,为文本或内容提供可感知信息,帮助用户更好的阅读和理解内容。
在学习的过程中尝试闭上眼睛学习旁白,发现旁白的朗读有些吵闹,每一个语言都很生硬,但是又能把每个内容朗读出来,旁白会阅读标题的文字内容。
当关闭旁白后,再点击手机屏幕,就恢复了手机的原样。但失去旁白后,闭上眼睛就无法操作手机。旁白这一功能对于盲人来说确实是非常好的功能,让更多的人可以学习并应用手机。
如果在使用旁白的过程中感觉比较困难,可以语音唤起Siri进行关闭。
Apple后面在推出Apple intelligence时,或许可以让盲人或依赖屏幕阅读器的人群,在操作iOS系统上,得到更好的使用体验。
参考资料
Identifying views with useful labels:https://www.hackingwithswift.com/books/ios-swiftui/identifying-views-with-useful-labels