Kotlin Multiplatform Development Help

iOS无障碍功能支持

Compose Multiplatform 的无障碍支持让残障人士能够像使用原生 iOS UI 一样舒适地与 Compose Multiplatform 界面交互:

  • 屏幕阅读器和旁白功能可以访问 Compose Multiplatform UI 的内容

  • Compose Multiplatform UI 支持与原生 iOS UI 相同的导航和交互手势

这得益于 Compose API 生成的语义数据现在会映射到 iOS 无障碍服务所使用的原生对象和属性。对于使用 Material 组件构建的大部分界面,这一过程会自动完成。

您还可以在测试和其他自动化场景中使用这些语义数据:诸如 testTag 等属性将正确映射到 accessibilityIdentifier 等原生无障碍属性。这使得 Compose Multiplatform 的语义数据能够被无障碍服务和 XCTest 框架识别。

iOS 无障碍支持目前处于早期开发阶段。如果您遇到使用问题,欢迎在 Slack 频道 #compose-iosYouTrack 提交反馈。

自定义无障碍树同步

默认设置下:

  • iOS 无障碍树仅在无障碍服务运行时与 UI 同步

  • 同步事件不会被记录

您可以通过新的 Compose Multiplatform API 调整这些设置。

选择树同步模式

为了调试事件和交互行为,您可以更改同步模式为:

  • 永不与 UI 同步(例如临时禁用无障碍映射)

  • 始终保持同步(每次 UI 更新时重写无障碍树以全面测试无障碍集成)

启用始终同步无障碍树的示例:

ComposeUIViewController(configure = { accessibilitySyncOptions = AccessibilitySyncOptions.Always(debugLogger = null) }) { // 你的 @Composable 内容 }

AccessibilitySyncOptions 类包含所有可用选项:

// package androidx.compose.ui.platform @ExperimentalComposeApi sealed class AccessibilitySyncOptions { // 永不同步无障碍树的选项 object Never: AccessibilitySyncOptions // 仅当无障碍服务运行时同步树的选项 // // 可包含 AccessibilityDebugLogger 来记录交互和树同步事件 class WhenRequiredByAccessibilityServices(debugLogger: AccessibilityDebugLogger?) // 始终同步无障碍树的选项 // // 可包含 AccessibilityDebugLogger 来记录交互和树同步事件 class Always(debugLogger: AccessibilityDebugLogger?) }

实现日志记录接口

您可以实现 AccessibilityDebugLogger 接口将自定义消息输出到指定位置:

ComposeUIViewController(configure = { accessibilitySyncOptions = AccessibilitySyncOptions.WhenRequiredByAccessibilityServices(object: AccessibilityDebugLogger { override fun log(message: Any?) { if (message == null) { println() } else { println("[无障碍]: $message") } } }) }) { // 你的 @Composable 内容 }

后续步骤

了解 Compose Multiplatform 的 iOS 无障碍支持后,您可以:

23 四月 2025