Поддержка специальных возможностей iOS
Поддержка специальных возможностей в Compose Multiplatform позволяет людям с ограниченными возможностями взаимодействовать с пользовательским интерфейсом Compose Multiplatform так же удобно, как с нативным пользовательским интерфейсом iOS:
Программы чтения с экрана и VoiceOver могут получать доступ к содержимому пользовательского интерфейса Compose Multiplatform.
Пользовательский интерфейс Compose Multiplatform поддерживает те же жесты для навигации и взаимодействия, что и нативный пользовательский интерфейс iOS.
Это стало возможным благодаря тому, что семантические данные, создаваемые API Compose, теперь сопоставляются с нативными объектами и свойствами, используемыми службами специальных возможностей iOS. Для большинства интерфейсов, созданных с помощью виджетов Material, это происходит автоматически.
Эти семантические данные также можно использовать при тестировании и в других сценариях автоматизации: такие свойства, как testTag, корректно сопоставляются с нативными свойствами специальных возможностей, например accessibilityIdentifier. Благодаря этому семантические данные Compose Multiplatform становятся доступны службам специальных возможностей и фреймворку XCTest.
Высококонтрастная тема
Compose Multiplatform использует класс ColorScheme из библиотеки Material3, в которой пока нет встроенной поддержки цветов с высокой контрастностью. Чтобы использовать высококонтрастную тему в iOS, добавьте в палитру приложения дополнительный набор цветов. Для каждого пользовательского цвета необходимо вручную указать его высококонтрастную версию.
В iOS есть настройка специальных возможностей Увеличение контрастности. Её состояние можно определить, проверив значение UIAccessibilityDarkerSystemColorsEnabled. Также можно отслеживать UIAccessibilityDarkerSystemColorsStatusDidChangeNotification. Эти API позволяют переключаться на высококонтрастную палитру, когда соответствующая системная настройка специальных возможностей включена.
При создании палитры используйте средство проверки контрастности, соответствующее WCAG, чтобы убедиться, что выбранный вами цвет onPrimary достаточно контрастирует с основным цветом, onSurface — с цветом поверхности и так далее. Коэффициент контрастности между цветами должен быть не менее 4.5:1. Для пользовательских цветов текста и фона коэффициент контрастности должен составлять 7:1, особенно для мелкого текста. Это относится и к lightColorScheme, и к darkColorScheme.
В этом коде показано, как определить светлую и тёмную высококонтрастные палитры в пакете темы:
Управление с помощью трекпада и клавиатуры
Compose Multiplatform для iOS поддерживает дополнительные способы управления устройством. Вместо сенсорного экрана можно включить AssistiveTouch для использования мыши или трекпада либо полный клавиатурный доступ для использования клавиатуры:
-
AssistiveTouch (Настройки | Универсальный доступ | Касание | AssistiveTouch) позволяет управлять iPhone с помощью указателя подключённой мыши или трекпада. Указатель можно использовать для нажатия значков на экране, навигации по меню AssistiveTouch или ввода текста с помощью экранной клавиатуры.
На iPad подключённая мышь или трекпад сразу работают для выполнения основных действий. Однако, чтобы настроить размер указателя, изменить скорость отслеживания или назначить определённые действия кнопкам, необходимо включить AssistiveTouch.
Полный клавиатурный доступ (Настройки | Универсальный доступ | Клавиатуры | Полный клавиатурный доступ) позволяет управлять устройством с помощью подключённой клавиатуры. Для навигации можно использовать такие клавиши, как Tab, а для активации элементов — Пробел.
Тестирование специальных возможностей с помощью фреймворка XCTest
Семантические данные специальных возможностей можно использовать при тестировании и в других сценариях автоматизации. Такие свойства, как testTag, корректно сопоставляются с нативными свойствами специальных возможностей, например accessibilityIdentifier. Благодаря этому семантические данные Compose Multiplatform становятся доступны службам специальных возможностей и фреймворку XCTest.
В тестах пользовательского интерфейса можно использовать автоматизированные проверки специальных возможностей. Вызов performAccessibilityAudit() для XCUIApplication проверит текущее представление на наличие проблем со специальными возможностями так же, как это делает Accessibility Inspector.
func testAccessibilityTabView() throws {
let app = XCUIApplication()
app.launch()
app.tabBars.buttons["MyLabel"].tap()
try app.performAccessibilityAudit()
}
Настройка синхронизации дерева специальных возможностей
По умолчанию:
Дерево специальных возможностей iOS синхронизируется с пользовательским интерфейсом, только когда работают службы специальных возможностей.
События синхронизации не записываются в журнал.
Эти настройки можно изменить с помощью нового API Compose Multiplatform.
Выбор режима синхронизации дерева
Для отладки и тестирования событий и взаимодействий можно изменить режим синхронизации:
Никогда не синхронизировать дерево с пользовательским интерфейсом, например, чтобы временно отключить сопоставление специальных возможностей.
Всегда синхронизировать дерево, чтобы оно обновлялось при каждом изменении пользовательского интерфейса и можно было тщательно протестировать интеграцию специальных возможностей.
Пример включения постоянной синхронизации дерева специальных возможностей:
ComposeUIViewController(configure = {
accessibilitySyncOptions = AccessibilitySyncOptions.Always(debugLogger = null)
}) {
// your @Composable content
}
Класс AccessibilitySyncOptions содержит все доступные параметры:
// package androidx.compose.ui.platform
@ExperimentalComposeApi
sealed class AccessibilitySyncOptions {
// Option to never synchronize the accessibility tree
object Never: AccessibilitySyncOptions
// Option to synchronize the tree only when Accessibility Services are running
//
// You can include an AccessibilityDebugLogger to log interactions and tree syncing events
class WhenRequiredByAccessibilityServices(debugLogger: AccessibilityDebugLogger?)
// Option to always synchronize the accessibility tree
//
// You can include an AccessibilityDebugLogger to log interactions and tree syncing events
class Always(debugLogger: AccessibilityDebugLogger?)
}
Реализация интерфейса ведения журнала
Можно реализовать интерфейс AccessibilityDebugLogger, чтобы записывать пользовательские сообщения в выбранный вами источник вывода:
ComposeUIViewController(configure = {
accessibilitySyncOptions = AccessibilitySyncOptions.WhenRequiredByAccessibilityServices(object: AccessibilityDebugLogger {
override fun log(message: Any?) {
if (message == null) {
println()
} else {
println("[a11y]: $message")
}
}
})
}) {
// your @Composable content
}
Что дальше?
Подробнее см. в руководстве по специальным возможностям Apple.
Попробуйте проект, созданный с помощью мастера Kotlin Multiplatform, в привычном процессе работы со специальными возможностями iOS.
© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/multiplatform/compose-ios-accessibility.html