ios-accessibility
iOS accessibility — Dynamic Type, VoiceOver, contrast, and audits
Source: Apple HIG Accessibility (developer.apple.com/design/human-interface-guidelines/accessibility), the SwiftUI accessibility modifiers reference + @Environment accessibility keys, and the performAccessibilityAudit / Accessibility Inspector tooling (WWDC23 "Perform accessibility audits", carried into Xcode 26/27). Plus WWDC 2026 / iOS 27 Liquid Glass refinement coverage (MacRumors, TechTimes, Neowin — June 2026) for the new transparency slider and material legibility changes (§6). iOS 26 = shipping baseline; iOS 27 (WWDC 2026) = current cycle — most of this skill is version-stable; the iOS 27 deltas are the Liquid Glass transparency slider and material-legibility tuning, flagged inline. Cross-checked across multiple passes (June 2026). Apple's stance: accessibility is a foundational design decision, not a retrofit — design for it from the first layout.
1. The system settings you must respond to
Apple ships these as user toggles; your app inherits some for free and must honor the rest. Each maps to a SwiftUI @Environment key (read once, branch your view):
| Setting | @Environment key |
What you do |
|---|---|---|
| Larger Text (Dynamic Type) | \.dynamicTypeSize |
Use built-in text styles; reflow at AX sizes (§2) |
| Bold Text | (inherited automatically) | Don't fight it; test layouts don't clip |
| Reduce Motion | \.accessibilityReduceMotion |
Drop large transitions; cross-fade instead (§6) |
| Reduce Transparency | \.accessibilityReduceTransparency |
Swap materials/blur for opaque fills (still binary; see §6 for the iOS 27 slider) |
| Increase Contrast | \.colorSchemeContrast (.increased) |
Use higher-contrast color pair |
| Differentiate Without Color | \.accessibilityDifferentiateWithoutColor |
Add shape/text/icon, not just hue (§4) |
| VoiceOver running | \.accessibilityVoiceOverEnabled |
Rarely branch on this — fix labels instead |
Don't gate core meaning on any single setting. These refine an already-accessible layout; they are not the layout.