Accessibility
This section describes support for iOS accessibility features in the ChatCenterUI SDK, along with recommendations for integrators who have mandatory VoiceOver / Dynamic Type / RTL requirements.
Supported system features
| iOS feature | SDK support | Comment |
|---|---|---|
| VoiceOver | Basic | System UIButton / UILabel use their text as the default accessibilityLabel. The SDK does not set accessibilityLabel for custom buttons and icons (IconButtonStyle, elements from ChatImages) — to meet your requirements, set labels directly on UIButton / UIImageView in your own subviews of the parent application. |
| Dynamic Type | Partial | Fonts set through ChatTypography directly (.systemFont(ofSize:)) do not scale automatically. To support scaling, wrap them in UIFontMetrics: UIFontMetrics.default.scaledFont(for: ...) (see design-system/intro). System elements (the standard navigationBar) respond to the system font size. |
| Reduce Motion | Partial | System UIKit transitions respect the setting automatically, but the SDK contains several of its own animations (showing/hiding toasts, the search bar, link previews) without checking UIAccessibility.isReduceMotionEnabled. For strict compliance, test the interface with the setting enabled. |
| Increase Contrast | System | Colors from UIColor.systemX adapt. For custom colors in ChatColors / ChatComponents, ensure contrast ≥ 4.5:1 (WCAG AA) yourself. |
| Bold Text | System | Applied to system fonts automatically. Does not affect custom fonts — for consistent behavior, use only System fonts. |
| Reduce Transparency | Honored | On iOS 26+, Liquid Glass becomes unavailable when the setting is enabled. The UIApplication.isLiquidGlassAvailable() extension returns false on iOS < 26 or when Reduce Transparency is enabled — use it in your own code if you apply Liquid Glass in custom components. |
| RTL (Arabic, Hebrew) | Basic | The system UINavigationController and UICollectionView / UITableView cells are mirrored automatically by standard UIKit mechanisms. The SDK itself does not manage semanticContentAttribute. Custom images in ChatImages (arrows, directional icons) are not mirrored — set imageFlippedForRightToLeftLayoutDirection() in your application code, or use symmetric icons. |
RTL scenarios
If your application supports Arabic or Hebrew:
// AppDelegate / test launch
UIView.appearance().semanticContentAttribute = .forceRightToLeft
This call is a global side effect: it affects all of UIKit in the application, not just the SDK. Apply it at the application level, fully aware of the consequences for the rest of your screens.
After this, standard navigation elements are mirrored. What is not mirrored automatically:
-
Arrow icons in
ChatImages(backButtonImage,nextButtonImage,sendButtonImage,scrollToBottomImage,scrollToTopImage) — the SDK does not know their "direction". If you define customChatImage, set on theUIImage:let arrow = UIImage(systemName: "arrow.right")?.imageFlippedForRightToLeftLayoutDirection() -
Custom message cells with
.left/.rightalignment — the current SDK implementation always shows incoming messages on the left and outgoing on the right, regardless of RTL. This behavior cannot be changed throughChatThemein the current version.
Color contrast
Minimum 4.5:1 for text against background (WCAG AA). Check the contrast in styles that can be overridden through ChatTheme:
| Pair | Where defined | Purpose |
|---|---|---|
incomeMessages.textMessageStyle.textStyle.color ↔ incomeMessages.bubbleTintColor | ChatFlow | Text of incoming messages (from the operator) |
outcomeMessages.textMessageStyle.textStyle.color ↔ outcomeMessages.bubbleTintColor | ChatFlow | Text of outgoing messages (your own) |
textMessageStyle.linkTextStyle.color ↔ bubbleTintColor | TextChatMessageStyle (via income/outcomeMessages.textMessageStyle) | Links in message bubbles |
inputViewStyle.inputTextStyle.textStyle.color ↔ input field background | ChatFlow | Text in the input field (the field background is inherited from colors.background) |
Use a Color Contrast Analyser, for example the ColorSync Utility module (macOS) or contrast-ratio.com.
Known limitations
| Limitation | Workaround |
|---|---|
Custom fonts in ChatTypography do not respond to Dynamic Type without UIFontMetrics | Wrap each UIFont in UIFontMetrics.default.scaledFont(for:) |
Directional icons in ChatImages are not mirrored in RTL | UIImage.imageFlippedForRightToLeftLayoutDirection() |
| Message layout (incoming on the left, outgoing on the right) is fixed | Not configurable in the current major version |
The SDK does not set accessibilityLabel for custom button styles (IconButtonStyle) and icons from ChatImages | Set accessibilityLabel directly on UIButton / UIImageView in your own subviews of the parent application |
Related sections
- Colors — palette and contrast
- Typography — font configuration
- Localization — language support, including RTL
- Known limitations — list of 5.x limitations