
-
针对辅助访问自定 App
辅助访问是一种独具特色、突出重点的 iOS 体验,让有认知障碍的用户可以更轻松地独立使用 iPhone 和 iPad。在 iOS 和 iPadOS 26 中,你可以对 App 在辅助访问模式下的运行效果进行自定,为用户提供更大的便利性和独立性。了解如何使用 AssistiveAccess SwiftUI 场景类型来定制你的 App,并探索可以帮助你为每一个人打造高质量辅助触控体验的关键设计原则。
章节
- 0:00 - 开场介绍
- 0:59 - 了解辅助访问
- 4:09 - 创建场景
- 7:08 - 量身定制你的 App
资源
相关视频
WWDC25
WWDC23
-
搜索此视频…
大家好我是 Anne 是 Apple 辅助功能团队的一员 今天 很高兴能与大家探讨辅助访问 它是 Apple 专为具有 认知障碍的用户 设计的一种精简版 iOS 和 iPadOS 体验 辅助访问通过提炼 App 和控件的精髓内容 重新构想了 用户与设备之间的交互方式 这种提纯的体验可确保每个人 都能轻松独立地浏览自己的设备 在 iOS 和 iPadOS 26 中 你的 App 有机会通过 辅助访问场景类型 无缝集成这一体验
今天 你将了解如何在辅助访问中 为你的 App 实现出色的体验 我将介绍如何使用 SwiftUI 创建辅助访问场景 以及进一步定制 App 时 需牢记的原则
首先 我来回顾一下辅助访问
Apple 在 iOS 和 iPadOS 17 中 引入了辅助访问
这种精简的系统体验 专为具有认知障碍的用户设计 旨在减轻认知负担 因为它可以为 App 和界面提供 精简的交互方式、 清晰的成功路径 以及一致的设计实践 如果你是刚开始接触辅助访问 请观看“了解 Assistive Access” 了解更多信息 辅助访问支持 多个精简的内置 App 例如这里显示的“相机”和“信息”
这些 App 具有共同的风格: 控件较大、 界面精简 且能用视觉元素替代文字 通过在辅助访问中 确立清晰且目标明确的 设计语言 这些 App 可以减轻与各种新界面 交互时的认知压力 一致的设计可为用户 提供稳定的预期效果
未针对辅助访问 进行优化的 App 将默认 以缩小的边框显示 这是为了给返回按钮腾出空间 这个按钮始终显示在设备底部 返回按钮可从 App 导航到主屏幕 如果你拥有已专为具有 认知障碍的用户设计的 App 你可能想要将 App 原样引入辅助访问 举一个很典型的例子 假设你支持一款辅助和替代通信 App 也称为 AAC App 如果你的这款 App 专为具有认知障碍的用户而设计 并且你希望将相同的布局 和体验引入辅助访问 那么你的 App 就可以 充分利用全屏模式 要全屏显示 App 请在 App 的 Info.plist 中将 UISupportsFullScreenInAssistiveAccess 键 设置为 true App 的外观将与 辅助访问关闭时相同 不同之处在于它将填满整个屏幕 而不是以缩小的边框显示 如果需要提供运行时变体 请使用 SwiftUI 和 UIKit 支持 来检测辅助访问会话 是否处于有效状态
在辅助访问中 采用全屏模式的 App 会显示在辅助功能设置中的 “优化的 App”列表下
如果你的 App 并非专为 具有认知障碍的用户而设计 请了解如何利用 iOS 和 iPadOS 26 中的支持 来创建辅助访问场景 借助这种场景类型 你将提供量身定制的体验 使控件像“相机”和“信息”等 内置 App 那样 自动以熟悉且醒目的 风格显示 这与全屏支持不同 因为采用全屏支持时 除屏幕尺寸外 App 的其他方面均保持不变
如果不确定该选择哪种路径 请选择场景路径 以充分利用 iOS 26 和 iPadOS 26 为辅助访问 提供的所有功能 我将演示这种场景类型如何提升 App 在辅助访问中的体验 辅助访问中的 App 均以清晰简明为设计重点 而这种清晰简明源于 启用辅助访问后 原生控件的 独特显示方式
使用这种场景类型 你的 App 会以与现有体验相对应 但更大、更清晰的控件风格显示 这种熟悉的设计可帮助 具有认知障碍的用户 充分利用你的 App 要针对辅助访问设置你的 App 请先将 UISupportsAssistiveAccess 这个 Info.plist 键 在 App 套装中设置为 true 这可确保 App 出现在辅助访问设置中的 “优化的 App”列表下 你的 App 还将以全屏模式启动 而不是以默认的缩小边框显示
然后 采用辅助访问场景 打造精简 App 体验 我们来实际操作一下
我将更新一款我一直在使用的 App 使用这个绘图 App 我可以在画布上画图 将绘图分类放到文件夹和收藏夹中 并使用一系列编辑工具 创作有趣且引人入胜的插图
我的 App 将使用 SwiftUI 生命周期 我有 1 个场景 它是一个声明我的 主内容视图的窗口组
在 App 的 Info.plist 中 将 UISupportsAssistiveAccess 设置为 true 后 我会将 AssistiveAccess 场景添加到 App 在辅助访问场景中 我创建了一个新的内容视图 这个视图具备我为辅助访问 设计的自定层次结构 将承载我轻量级的 精简 App 体验 当用户在辅助访问中 启动 App 时 系统将创建并附加这个场景
场景激活后 App 的原生 SwiftUI 控件将以 独特的辅助访问设计显示 按钮、列表和导航标题 都将以更醒目的风格显示 而无需额外配置
控件还将自动遵循 在辅助访问设置中 配置的网格或行屏幕布局
要测试场景激活后 App 的布局方式 请将 assitiveAccess 特征 传递给 SwiftUI 预览宏
对于 UIKit App 你可以利用 iOS 和 iPadOS 26 中的支持实现类似效果 从而在 UIKit 生命周期 App 中 定义和激活 SwiftUI 场景 使用 UIKit 在场景委托类的静态 属性 rootScene 中声明 AssistiveAccess SwiftUI 场景 要激活这个场景 请使用 App 委托 返回用于托管辅助访问 场景的场景委托类
有关场景桥接的更多信息 请观看今年的专题讲座 “SwiftUI 的新功能” 辅助访问以简单轻松的 交互为核心 现在 你的 App 已针对 辅助访问完成设置 接下来要将重点放在 App 内容上 我将介绍一些指导原则 帮助你针对辅助访问 调整 App 内容的重点 在考虑这种体验时 你需要提炼 App 的基本功能 考虑如何建立明白易懂的支持性路线 而不受破坏性更改的影响 并以多种方式传达信息
首先 确定 App 的核心功能 问问自己 App 中支持的 哪一两项功能最重要 然后将这些功能引入辅助访问 移除功能似乎有悖常理 但缩减选项可以减少干扰 并减轻整体认知负担 如果拿不准 只需坚持提供精简且重点明确的 辅助访问体验 对于我的 App 我会将两项功能引入辅助访问: 在画布上画图的功能 以及查看这些图纸的功能 App 根视图中将仅包含这些 UI 元素 我会将 App 提供的其他功能 例如进行收藏或编辑草图的功能 保存在辅助访问之外 确保提供重点明确的体验 这是重新设计后的 App 根视图 我实现了我确定的两个功能: 绘图和图库
这两个功能显示为两个导航链接 由于辅助访问场景处于有效状态 这些链接会自动遵循 首选的网格或行布局风格
当我导航到某个视图时 辅助访问返回按钮 会遍历回 App 的导航堆栈 而无需额外操作
我的 App 现在重点更明确了 屏幕上的 UI 元素仅包含 App 的基本功能 并且 UI 以熟悉的 辅助访问风格显示 我还提供了两条清晰的路线: 绘图或图库 选项越少 选择起来越简单 而选择的简化又可 在用户浏览 App 时 提高成功的可能性 在决定如何最好地 凝练 App 体验之后 你可能还需要进行 某种程度的自定设置 我将介绍如何在 辅助访问中实现功能自定 在使用辅助访问时 请记住 目的是要减少认知压力
丰富的功能和自定设置 虽可大大提升 App 的完整性 但屏幕上的大量内容 可能会给有认知障碍的人 带来挑战 请减少在任何给定时间显示的 选项数量 从而减少决策干扰 这既适用于屏幕上元素的数量 又适用于视图的目的 减少选项可消除 App 导航中的干扰 选择过多可能会让人不知所措 并增加认知负担 接下来 请确保显示的控件清晰可见 避免隐藏手势或嵌套界面 对于具有认知障碍的人来说 这些类型的互动 可能不太容易被发现 因此 请使用清晰可见的醒目控件
用户会以不同的速度浏览你的 App 为了确保每个人都能 按照自己的节奏完成任务 请避免选用定时交互 如果 UI 或视图在超时后 会自动消失或改变状态 请重新设计相应体验 给用户留出足够时间 让他们能够 在你的 App 上成功完成操作
在辅助访问中 设计可以 指导用户完成选择过程的体验 构建一个循序渐进的分步式流程 而不是一次提供多个选项 以数量合理的步骤引导受众 避免因采用冗长的设置过程 而影响体验
需要注意的是 要添加缓慢而刻意构建的自定内容 你可能需要对某些决策位置 进行重新排序 这样做的目的是 确保单独处理各个决策 从而减轻认知压力 并带来更愉快的使用体验 有一些重要的操作可能很难恢复 比如删除照片 请考虑完全移除这个功能 如果你确实计划实施更永久的操作 比如删除 在适当的情况下 请要求确认两次 从而确保用户不会陷入 他们不想要的境地
你已经学习了在辅助访问中 建立理想交互的最佳实践 例如减少显示的选项、 支持醒目的 UI 以及避免定时交互 你还学习了如何构建 循序渐进的引导式流程 以及重新考虑实施 破坏性操作的方式和位置 我要将这些相同的设计准则 应用到我的 App 中
我将在 App 的辅助访问 体验中添加彩色绘图支持 在辅助访问之外 则使用颜色选取器选择笔划颜色
辅助访问的一些 App 可能 具有不透明度等颜色选取器选项 但我的 App 只需要颜色 这是我将量身定制的一种体验
本着减少选项的原则 我在辅助访问中 为我的 App 设计了一个 专用的颜色选择视图 它将颜色选取器浓缩为一个决策: 笔画颜色 它还将呈现的颜色减少为寥寥几种 一键点击 即可使用某个颜色绘图
我在“绘图”选项与进入画布之间 添加了这个视图 这提供了一种分步式方法 可以保证 使用 App 的每个人都会 在选择颜色后进入画布 请注意 这种顺序呈现 不同于颜色选取器实现 在后者中 颜色选择将在画布中 作为一个选项出现 而我在这里是将颜色选择决策 单独显示在一个 始终在进入画布前呈现的视图中 在我自己的 App 中 我还移除了可能 令人困惑或难以执行撤销操作的功能 在画布视图中 我的 App 不支持撤消笔画的选项
在图库中 没有用于删除图纸的选项 这些决定都是为了创造一个 安全且支持性的环境 消除用户在 App 中误执行 某项操作的风险 辅助访问的一个 重要方面是直观易懂的设计 对于某些具有认知障碍的用户 图片和图标比单纯的文字更容易理解 这意味着信息应该以多种方式呈现 当 App 在辅助访问中运行时 不要仅仅依靠文字 而要提供替代性的视觉元素 来传达含义 在实现按钮和导航链接等控件时 请同时包含图标和标签
在辅助访问中 视觉设计也适用于导航标题 因为导航栏支持图标
请在你自己的 App 中实现这一点 让辅助访问 导航图标修饰符 传递图片或传递系统图片的名称 使图片在辅助访问场景处于 有效状态时 随导航标题一起显示 请确保所有导航标题都有附带的图标
现在 你已经学习了如何 为具有认知障碍的用户设计 App 如何采用 SwiftUI 场景 以及如何将 App 引入辅助访问 请使用你自己的 App 完成 本讲座中讨论的设计练习 请牢记目标: 完善你在辅助访问中 支持的体验并减少干扰 请记住 最好的反馈来源是你的受众: 一定要在辅助访问 社区中寻找测试机会 感谢观看 感谢你致力于设计 可服务于所有人的 App
-
-
5:21 - Create a scene for Assistive Access
// Create a scene for Assistive Access import SwiftUI import SwiftData @main struct WWDCDrawApp: App { var body: some Scene { WindowGroup { ContentView() .modelContainer(for: [DrawingModel.self]) } AssistiveAccess { AssistiveAccessContentView() .modelContainer(for: [DrawingModel.self]) } } }
-
6:25 - Display an Assistive Access preview
// Display an Assistive Access preview import SwiftUI struct AssistiveAccessContentView: View { @Environment(\.modelContext) var context var body: some View { VStack { Image(systemName: "globe") .imageScale(.large) .foregroundStyle(.tint) Text("Hello, world!") } .padding() } } #Preview(traits: .assistiveAccess) AssistiveAccessContentView() }
-
6:35 - Declare a SwiftUI scene with UIKit
// Declare a SwiftUI scene with UIKit import UIKit import SwiftUI class AssistiveAccessSceneDelegate: UIHostingSceneDelegate { static var rootScene: some Scene { AssistiveAccess { AssistiveAccessContentView() } } /* ... */ }
-
6:55 - Activate a SwiftUI scene with UIKit
// Activate a SwiftUI scene with UIKit import UIKit @main class AppDelegate: UIApplicationDelegate { func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { let role = connectingSceneSession.role let sceneConfiguration = UISceneConfiguration(name: nil, sessionRole: role) if role == .windowAssistiveAccessApplication { sceneConfiguration.delegateClass = AssistiveAccessSceneDelegate.self } return sceneConfiguration } }
-
14:36 - Display an icon alongside a navigation title
// Display an icon alongside a navigation title import SwiftUI struct ColorSelectionView: View { var body: some View { Group { List { ForEach(ColorMode.allCases) { color in NavigationLink(destination: DrawingView(color: color)) { ColorThumbnail(color: color) } } } .navigationTitle("Draw") .assistiveAccessNavigationIcon(systemImage: "hand.draw.fill") } } }
-
-
- 0:00 - 开场介绍
iOS 17 和 iPadOS 17 推出了“辅助访问”,这项辅助功能可让具有认知障碍的用户更轻松地使用系统。 你可以将 SwiftUI 中的“辅助访问”场景类型融入 App,并遵循相关设计原则,为这类受众打造出色体验。
- 0:59 - 了解辅助访问
Apple 在 iOS 17 和 iPadOS 17 中推出了“辅助访问”功能,旨在为有认知障碍的用户简化系统体验。这个功能在“相机”和“信息”等少数精选内建 App 中提供了精简的交互方式、清晰的路径和一致的设计实践,在其中提供了较大的控件和能够替代文本的视觉元素。 未针对“辅助访问”进行优化的 App 会显示在缩小的边框中,并带有一个持久的后退按钮。如果你开发的 App 已经针对认知障碍用户进行了设计,就可以在“辅助访问”中为它启用全屏幕模式。 对于未经优化的 App,iOS 17 和 iPadOS 17 提供了相应支持,让你能够以熟悉的风格,使用自动显示的控件打造量身定制的体验。
- 4:09 - 创建场景
App 的“辅助访问”设计应尽量清晰明了,为原生控件使用更大、更清晰的样式。要启用这个功能,请将 App 套装中的特定键设置为 true,这会将 App 列为“已优化”并在全屏模式下启动。 这样你就能在 App 中创建一个单独的“辅助访问”场景,这个场景会呈现精简的轻量级界面。这个场景将自动以更清晰的网格或行的形式来显示原生控件。 对于 SwiftUI App,可以在“辅助访问”场景中添加自定视图层次结构来实现上述目的。UIKit App 也可以支持这项功能,方法是使用 iOS 和 iPadOS 26 中新的桥接支持来定义和激活 SwiftUI 场景。
- 7:08 - 量身定制你的 App
要针对“辅助访问”优化 App,请将 App 的核心功能提炼出来,重点关注一两个基本功能。这种精简版本能减轻干扰和认知负荷。在 App 界面上设计清晰醒目的控件,避免使用隐藏手势或定时交互。 应以多种方式呈现信息,例如在文本旁边加上图标和标签。将导航设计为直观的分步操作,让后退按钮自动应用首选布局样式。 应尽量避免存在不可逆的操作,或为这类操作提供多次确认。通过遵循这些原则,你可以为使用“辅助访问”的用户打造一个安全且提供支持的体验。