Перейти к основному содержимому
Версия: 5.9.0

Доступность (Accessibility)

Этот раздел описывает поддержку iOS-функций доступности в SDK ChatCenterUI и рекомендации для интеграторов, у которых требования VoiceOver / Dynamic Type / RTL обязательны.

Поддерживаемые системные функции

Функция iOSПоддержка SDKКомментарий
VoiceOverБазоваяСистемные UIButton/UILabel имеют accessibilityLabel по умолчанию из текста. SDK не задаёт accessibilityLabel для кастомных кнопок и иконок (IconButtonStyle, элементы из ChatImages) — для соответствия требованиям задавайте лейблы напрямую на UIButton/UIImageView в собственных subviews родительского приложения.
Dynamic TypeЧастичнаяШрифты, заданные через ChatTypography напрямую (.systemFont(ofSize:)), не масштабируются автоматически. Для поддержки масштабирования оборачивайте в UIFontMetrics: UIFontMetrics.default.scaledFont(for: ...) (см. design-system/intro). Системные элементы (стандартный navigationBar) реагируют на размер шрифта системы.
Reduce MotionЧастичнаяСистемные переходы UIKit соблюдают настройку автоматически, но SDK содержит несколько собственных анимаций (показ/скрытие тостов, панели поиска, превью ссылок) без проверки UIAccessibility.isReduceMotionEnabled. Для строгого соответствия — протестируйте интерфейс с включённой настройкой.
Increase ContrastСистемноЦвета из UIColor.systemX адаптируются. Для пользовательских цветов в ChatColors/ChatComponents обеспечивайте контраст ≥ 4.5:1 (WCAG AA) самостоятельно.
Bold TextСистемноПрименяется к системным шрифтам автоматически. На пользовательские шрифты не влияет — для согласованного поведения подключайте только System fonts.
Reduce TransparencyУчитываетсяНа iOS 26+ Liquid Glass становится недоступен при включённой настройке. Extension UIApplication.isLiquidGlassAvailable() возвращает false на iOS < 26 или при включённой настройке Reduce Transparency — используйте в своём коде, если применяете Liquid Glass в кастомных компонентах.
RTL (арабский, иврит)БазоваяСистемный UINavigationController и UICollectionView/UITableView-cells зеркалятся автоматически стандартными механизмами UIKit. SDK сам не управляет semanticContentAttribute. Кастомные изображения в ChatImages (стрелки, иконки направления) не зеркалятся — задавайте imageFlippedForRightToLeftLayoutDirection() в коде вашего приложения, либо используйте симметричные иконки.

RTL-сценарии

Если приложение поддерживает арабский или иврит:

// AppDelegate / тестовый запуск
UIView.appearance().semanticContentAttribute = .forceRightToLeft
warning

Этот вызов — глобальный side-effect: он влияет на весь UIKit в приложении, а не только на SDK. Применяйте его на уровне приложения, осознавая последствия для остальных экранов.

После этого зеркалятся стандартные элементы навигации. Что не зеркалится автоматически:

  • Иконки стрелок в ChatImages (backButtonImage, nextButtonImage, sendButtonImage, scrollToBottomImage, scrollToTopImage) — SDK не знает их «направления». Если вы определяете кастомные ChatImage, задавайте у UIImage:

    let arrow = UIImage(systemName: "arrow.right")?.imageFlippedForRightToLeftLayoutDirection()
  • Кастомные ячейки сообщений с .left/.right alignment — текущая реализация SDK всегда показывает входящие слева, исходящие справа независимо от RTL. Это поведение нельзя изменить через ChatTheme в текущей версии.

Контраст цветов

Минимум 4.5:1 для текста против фона (WCAG AA). Проверьте контрасты в стилях, которые могут быть переопределены через ChatTheme:

ПараГде задаётсяЗачем
incomeMessages.textMessageStyle.textStyle.colorincomeMessages.bubbleTintColorChatFlowТекст входящих сообщений (от оператора)
outcomeMessages.textMessageStyle.textStyle.coloroutcomeMessages.bubbleTintColorChatFlowТекст исходящих сообщений (свои)
textMessageStyle.linkTextStyle.colorbubbleTintColorTextChatMessageStyle (через income/outcomeMessages.textMessageStyle)Ссылки в баблах сообщений
inputViewStyle.inputTextStyle.textStyle.color ↔ фон поля вводаChatFlowТекст в поле ввода (фон поля наследуется от colors.background)

Используйте Color Contrast Analyser, например модуль ColorSync Utility (macOS) или contrast-ratio.com.

Известные ограничения

ОграничениеWorkaround
Свои шрифты в ChatTypography не реагируют на Dynamic Type без UIFontMetricsОборачивайте каждый UIFont в UIFontMetrics.default.scaledFont(for:)
Иконки направления в ChatImages не зеркалятся в RTLUIImage.imageFlippedForRightToLeftLayoutDirection()
Layout сообщений (входящие слева, исходящие справа) фиксированНе настраивается в текущем мажоре
SDK не задаёт accessibilityLabel для кастомных стилей кнопок (IconButtonStyle) и иконок из ChatImagesЗадавайте accessibilityLabel напрямую на UIButton/UIImageView в собственных subviews родительского приложения

Связанные разделы