为 Assistive Access 定制你的应用
Customize your app for Assistive Access
2025年6月9日
一句话判断
iOS 26 给了你一个正式的 AssistiveAccess SwiftUI scene 类型——在此之前你的应用在 Assistive Access 模式下只能显示缩小版的完整界面,现在你可以为认知障碍用户构建一个完全独立的精简体验。
这场 Session 讲了什么
Assistive Access 是 Apple 在 iOS/iPadOS 17 中为认知障碍用户设计的精简系统体验,特点是大控件、简化流程、视觉化的信息呈现。此前,未优化的应用会以缩小的框架显示(为底部的返回按钮留出空间)。iOS 26 引入了 AssistiveAccess SwiftUI scene,让你可以为这个模式提供一个完全定制的界面。
两种接入路径:如果你的 app 本身就是为了认知障碍用户设计的(如 AAC 辅助沟通应用),设置 UISupportsFullScreenInAssistiveAccess 就能在全屏模式下显示原有界面。其他应用则应该使用新的 AssistiveAccess scene——在这个 scene 中,原生控件(Button、List、NavigationTitle)自动显示为 Assistive Access 特有的大号、醒目样式。
Session 还梳理了为认知障碍用户设计的核心原则:精简功能到核心(去掉非必要功能)、减少同时呈现的选项、避免隐藏手势和计时交互、构建分步引导流程、对破坏性操作做二次确认、用图标+文字双通道传达信息。
值得深挖的点
”做减法”的设计哲学
这场 Session 最反直觉的建议是:为 Assistive Access 构建一个功能更少的界面。对开发者来说,删除功能是一种本能抗拒——“我的 app 有这些功能,用户可能需要”。但从认知负荷的角度看,每一个额外的选项都会增加决策成本。对于认知障碍用户,屏幕上有 5 个按钮和 2 个按钮是完全不同的体验。
Session 中的绘图 app 示例很说明问题:完整版有画布、文件夹、收藏、编辑工具,Assive Access 版本只保留了”画一幅画”和”查看画作”两个入口。颜色选择从复杂的 color picker 简化为几个预设色块,且在进入画布之前强制选择(分步引导),而不是在画布内选择。取消了撤销操作和删除画作功能——这些操作可能导致用户丢失成果且不知道如何恢复。
这个设计思路可以推广到任何面向大众用户的应用:即使你的目标用户不是认知障碍者,精简核心功能、减少决策点、提供明确路径的设计原则对所有人都有好处。Assistive Access 是一种极端场景下的设计压力测试。
SwiftUI scene 的自动样式适配
当你在 AssistiveAccess scene 中使用 SwiftUI 原生控件时,它们会自动变为 Assistive Access 特有的样式——按钮更大更醒目、列表自动适配 grid/row 布局、导航标题有图标支持。你不需要写任何样式代码,只要把现有的 SwiftUI 视图放进这个 scene 就行。
这个”零成本适配”的机制很巧妙:scene 类型本身就是一个上下文标记,SwiftUI 根据当前 scene 决定控件的渲染方式。你可以用 .assitiveAccess trait 在 SwiftUI preview 中预览效果。UIKit 应用也可以通过 scene bridging 使用这个功能——在 scene delegate 的 rootScene 静态属性中声明 AssistiveAccess scene。
代码片段
声明 AssistiveAccess scene,提供精简版界面:
@main
struct DrawingApp: App {
var body: some Scene {
WindowGroup {
MainContentView()
}
AssistiveAccess {
AssistiveAccessRootView() // 精简版入口
}
}
}
Assistive Access 精简入口只有两个核心功能:
struct AssistiveAccessRootView: View {
var body: some View {
List {
NavigationLink {
ColorSelectionView() // 分步引导:先选颜色
} label: {
Label("画一幅画", systemImage: "paintbrush")
}
NavigationLink {
GalleryView()
} label: {
Label("查看画作", systemImage: "photo.on.rectangle")
}
}
.navigationTitle("我的画板")
}
}
为导航标题添加 Assistive Access 图标:
Text("画一幅画")
.assistiveAccessNavigationIcon(Image(systemName: "paintbrush"))
最佳实践
建议在规划 Assistive Access 体验时,先问自己”用户最需要完成的 1-2 件事是什么”,然后只保留这些功能。如果不确定,宁可少做。
优先使用分步引导代替多选项并列。比如颜色选择不要在画布内提供——改成进入画布之前的独立选择步骤。这降低了每次决策的认知负荷。
避免在 Assistive Access 体验中使用计时交互(超时自动消失的 UI)、隐藏手势(需要 hover 或特定手势才能发现的控件)、以及不可逆的破坏性操作。如果必须提供删除等操作,做二次确认。
还有什么值得关注
UISupportsAssistiveAccessInfo.plist 键让你的 app 出现在 Assistive Access 设置的”已优化应用”列表中,并以全屏而非缩小框架启动。- UIKit 应用可以通过 scene bridging 使用 SwiftUI 的
AssistiveAccessscene,不需要完全迁移到 SwiftUI。 - 辅助功能社区是最好的测试来源——在 Assistive Access 社区内找机会做用户测试。