Meet Assistive Access
Accessibility & Inclusion 进阶 20m

认识辅助访问模式

Meet Assistive Access

2023年6月5日

在 Apple 官方观看视频

一句话判断

如果你的 app 没有做好自适应布局,Assistive Access 会帮你暴露出所有问题。

这场 Session 讲了什么

Apple 在 iOS 17 和 iPadOS 17 中引入了 Assistive Access(辅助访问),这是一种专门为认知障碍人士设计的设备使用模式。它将 app 和系统体验精简到核心功能,减轻认知负担。由信任的支持者(如家长、监护人)通过设置完成个性化配置后,使用者可以在辅助访问模式下更独立地操作 iPhone 和 iPad。

辅助访问的设计围绕三个核心目标:减少复杂度(更少的选项和步骤)、帮助用户预防错误(清晰的指示和可回退的操作)、创造熟悉的交互模式(一致的 UI 和多模态体验)。系统内置了电话、信息、音乐、相机和照片五个专门为此模式设计的 app。

对于第三方开发者来说,好消息是 app 在辅助访问模式下”开箱即用”。系统会自动在屏幕底部添加一个大的返回按钮,并将 app 显示在缩小的区域内。开发者可以通过在 Info.plist 中添加 UISupportsFullScreenInAssistiveAccess 键来让 app 全屏显示。

值得深挖的点

辅助访问模式的实现细节值得仔细研究。默认情况下,app 被放置在一个缩小的 frame 中以容纳系统返回按钮。这意味着如果你的 app 硬编码了基于设备屏幕尺寸的布局,在辅助访问模式下可能出现问题。你需要确保使用自适应布局方案。

另一个关键点是错误预防的设计理念。辅助访问要求在执行重要操作(如删除文件)时提供清晰的指引,并给予用户理解当前情况的机会。减少时间敏感的操作,确保用户随时可以返回。这些原则对普通 app 的设计同样有参考价值。

代码片段

在 Info.plist 中启用全屏模式:

<key>UISupportsFullScreenInAssistiveAccess</key>
<true/>

SwiftUI 中使用自适应布局容器:

// 使用 Stack 和 Grid 实现自适应布局
// 不要硬编码基于设备尺寸的布局
VStack {
    Grid {
        // 内容会根据可用空间自动调整
    }
}

UIKit 中使用 Safe Area:

// 使用 safeAreaInsets 定位视图
let insets = view.safeAreaInsets

// 使用 safeAreaLayoutGuide 应用标准边距
let guide = view.safeAreaLayoutGuide

最佳实践

  • 不要硬编码基于设备或屏幕尺寸的布局,使用自适应方案
  • SwiftUI 开发者应善用 Stack、Grid 等布局容器和布局修饰符
  • UIKit 开发者应使用 AutoLayout、Safe Area 和 Layout Guide
  • 在辅助访问模式下测试你的 app,确保所有交互正常
  • 关注 safeAreaInsetssafeAreaLayoutGuide 的正确使用

还有什么值得关注

  • Session “Compose custom layouts with SwiftUI” 提供了更深入的自定义布局方案
  • Session “UIKit: Apps for Every Size and Shape” 讲解了 UIKit 自适应布局的最佳实践
  • 辅助访问模式的设计原则(减少复杂度、预防错误、熟悉交互)对普通 app 的 UX 设计也有启发
WWDC 2023