iOS Accessibility 开发指南
基础概念
iOS 提供了强大的辅助功能(Accessibility)框架,帮助开发者创建可供所有用户使用的应用,包括视障、听障、运动障碍等用户群体。
核心组件
- VoiceOver: 屏幕阅读器,朗读界面元素
- 动态类型(Dynamic Type): 支持用户调整文本大小
- 开关控制(Switch Control): 为运动障碍用户提供替代交互方式
- 字幕和音频描述: 为听障用户提供支持
- 减少动态效果: 为对动画敏感的用户提供选项
实现辅助功能
1. 基本辅助功能属性
swift
// 设置元素的可访问性标签
element.accessibilityLabel = "完成按钮"
// 设置提示文本
element.accessibilityHint = "双击以提交表单"
// 设置特性
element.accessibilityTraits = .button
// 设置值
element.accessibilityValue = "50% 完成"
2. 支持 VoiceOver
- 确保所有交互元素都有有意义的
accessibilityLabel
- 对于图像,提供替代文本描述
- 使用
accessibilityHint
提供额外操作提示 - 实现
UIAccessibilityReadingContent
协议支持阅读长内容
3. 动态类型支持
swift
// 使用文本样式而非固定字体大小
let label = UILabel()
label.font = UIFont.preferredFont(forTextStyle: .body)
label.adjustsFontForContentSizeCategory = true
// 在视图控制器中监听变化
NotificationCenter.default.addObserver(
self,
selector: #selector(contentSizeCategoryDidChange),
name: UIContentSizeCategory.didChangeNotification,
object: nil
)
4. 颜色与对比度
- 确保文本与背景有足够对比度(至少4.5:1)
- 不要仅依靠颜色传达信息
- 支持深色模式
5. 自定义控件辅助功能
对于自定义控件,可能需要实现 UIAccessibility
协议:
swift
class CustomControl: UIView {
override var isAccessibilityElement: Bool {
get { return true }
set { }
}
override var accessibilityTraits: UIAccessibilityTraits {
get { return .adjustable }
set { }
}
override func accessibilityIncrement() {
// 处理增加操作
}
override func accessibilityDecrement() {
// 处理减少操作
}
}
测试辅助功能
-
使用 VoiceOver:
- 在设置中开启或使用快捷键(Command + F5)
- 学习手势导航(单指滑动、双击激活等)
-
辅助功能检查器:
- Xcode 中的 Accessibility Inspector
- 检查对比度、元素标签等
-
自动化测试:
swiftfunc testAccessibility() { XCUIApplication().launch() XCTAssertTrue(XCUIApplication().buttons["Submit"].isHittable) }
高级主题
辅助功能通知
swift
// 当界面发生重大变化时通知辅助功能系统
UIAccessibility.post(notification: .screenChanged, argument: nil)
// 其他常用通知类型
.layoutChanged
.announcement
.pageScrolled
辅助功能容器
对于复杂视图,可以使用 accessibilityElements
或实现 UIAccessibilityContainer
协议来管理阅读顺序。
辅助功能自定义动作
swift
let customAction = UIAccessibilityCustomAction(
name: "标记为已完成",
target: self,
selector: #selector(markAsComplete)
)
element.accessibilityCustomActions = [customAction]
最佳实践
- 从项目开始就考虑辅助功能,而非后期添加
- 测试时关闭视觉,仅使用 VoiceOver 操作应用
- 确保所有功能都可以通过键盘或开关控制访问
- 为视频内容提供字幕和音频描述
- 避免仅依赖手势操作,提供替代方案
通过遵循这些指南,您可以创建对所有用户都友好的 iOS 应用程序。