第76天 项目 15 第三部分
既然你已经了解到修复项目是多么简单了,现在是时候通过一些挑战和回顾所学知识来继续这项工作了。我相信你会觉得这一点也不难,甚至可能会继续惊讶于SwiftUI让辅助功能变得如此简单。
史蒂夫·鲍尔默(没错,就是那个史蒂夫·鲍尔默)曾经说过:“无障碍设计就是优秀的设计——它不仅让残障人士受益,也让所有用户受益。”他说得很对:花时间确保你的应用能为所有人服务,将为所有用户带来长远的好处。
今天,你需要完成第15个项目的总结章节,完成相关回顾,然后完成所有三个挑战。
- 辅助功能:总结
- 第15个项目回顾:辅助功能
辅助功能:总结
作者:Paul Hudson 2024年1月19日
辅助功能并非“可有可无”的功能——它应被视为应用程序设计的基本组成部分,并且从设计之初就应被纳入考量。SwiftUI之所以拥有出色的辅助功能支持,并非因为苹果在最后一刻才想到这一点,而是因为辅助功能从一开始就被深度整合其中——SwiftUI的每一个部分都是围绕辅助功能设计的。如果我们不达到同样的标准,就是对用户的极大不负责任。
此外,希望你也认同,添加额外的辅助功能其实非常简单:这里设置一些特殊值,那里进行一些分组,再加上一些额外的特性,这些都只是几分钟就能完成的简单操作,但对于全球数百万用户而言,这却是“难以使用”和“轻松使用”之间的天壤之别。
回顾所学内容
任何人都能看完一个教程,但要记住所学内容则需要实际付出努力。我的职责是确保你能从这些教程中收获尽可能多的知识,完成后面的练习题可以帮助你检验自己的学习成果。
挑战
学习编程最好的方法之一就是尽可能多地自己编写代码,因此我为你准备了三种扩展本应用的方式,帮助你确保完全理解其中的原理。
- “纸杯蛋糕角落”应用中的结账视图使用了一张图片和一个加载指示器,它们对用户界面没有实际信息贡献,请想办法让屏幕阅读器不读取这些内容。
- 修复“我的支出”应用中的列表行,让屏幕阅读器(VoiceOver)在一个标签中同时读取名称和金额,并在提示(hint)中读取类型。
- 对“月球探测”(Moonshot)应用进行全面的辅助功能审查——需要做出哪些修改才能使其完全具备完全无障碍?
【练习题】辅助功能
问题1/12:以下哪些表述是正确的?
- 选项1: 辅助功能提示(hint)会先被读取,然后再读取辅助功能标签(label)。
- 选项2: 辅助功能标签(label)会先被读取,然后再读取辅助功能提示(hint)。
问题2/12:以下哪些表述是正确的?
- 选项1: 辅助功能标签通常应简洁。
- 选项2: SF符号(SF Symbols)没有默认的辅助功能标签。
问题3/12:以下哪些表述是正确的?
- 选项1: 为应用添加辅助功能需要大量工作。
- 选项2: SwiftUI自动提供了大量辅助功能支持。
问题4/12:以下哪些表述是正确的?
- 选项1: 如果没有自定义标签,SwiftUI会将图片的名称作为屏幕阅读器(VoiceOver)的描述进行读取。
- 选项2: 应使用模拟器测试屏幕阅读器(VoiceOver)读取标签的方式。
问题5/12:以下哪些表述是正确的?
- 选项1: 图片视图(Image view)自动具有
isImage辅助功能特性。 - 选项2: 默认情况下,SwiftUI对滑块(slider)的辅助功能值使用1到10的范围。
问题6/12:以下哪些表述是正确的?
- 选项1: 只能添加辅助功能标签或辅助功能提示中的一个,不能同时添加两者。
- 选项2: 可以在辅助功能标签中使用条件语句来决定显示哪些文本。
问题7/12:以下哪些表述是正确的?
- 选项1: 装饰性图片是指那些仅用于美化用户界面的图片。
- 选项2: 每个视图最多只能有一个辅助功能特性(trait)。
问题8/12:以下哪些表述是正确的?
- 选项1: 如果没有特别组合,同一
VStack中的三个文本框(text field)会被视为独立元素。 - 选项2: 如果使用
accessibilityElement(children: .ignore),整个视图将对屏幕阅读器(VoiceOver)不可见。
问题9/12:以下哪些表述是正确的?
- 选项1: 可以将视图从辅助功能系统中隐藏。
- 选项2: 建议将视图从辅助功能系统中隐藏。
问题10/12:以下哪些表述是正确的?
- 选项1: 可以控制SwiftUI读取步进器(stepper)和滑块(slider)等UI控件值的方式。
- 选项2: 由于
VStack是容器,因此不能为其设置辅助功能数据。
问题11/12:以下哪些表述是正确的?
- 选项1: SwiftUI允许将多个视图组合成一个单独的辅助功能元素。
- 选项2: 带有
onTapGesture()修饰符的视图会自动具有isButton特性。
问题12/12:以下哪些表述是正确的?
- 选项1: 辅助功能标签必须始终是单个硬编码字符串。
- 选项2: 我们的目标应该是让所有应用都能为所有人提供无障碍使用体验。