2026 SwiftUI & UI FrameworksAccessibility & Inclusion
WWDC26 · 16 min · SwiftUI & UI Frameworks / Accessibility & Inclusion
Refine accessibility for custom controls
Unlock the full potential of your app’s interactive elements by making them accessible to everyone. We’ll break down how people understand and use controls with VoiceOver and other assistive technologies, exploring a variety of input methods like actions, the passthrough gesture, and direct touch. Join us for an in-depth exploration of several example controls as we refine and elevate the accessibility experience in each one.
Watch at developer.apple.com ↗Chapters
Code shown on screen · 5 snippets
Improve accessibility for coffee dispenser
// Improve accessibility for coffee dispenser
import SwiftUI
struct CoffeeDispenserView: View {
var coffee: Double = 0.0
var body: some View {
CoffeeSlider(value: coffee)
.accessibilityElement()
.accessibilityLabel("Coffee Dispenser")
.accessibilityValue("\(Int(coffee)) ounces")
.accessibilityAddTraits(.adjustable)
.accessibilityAdjustableAction { direction in
switch direction {
case .increment:
increaseCoffeeAmount()
case .decrement:
decreaseCoffeeAmount()
}
}
}
} Set the accessibility activation point
// Set the accessibility activation point
import SwiftUI
struct CoffeeDispenserView: View {
var coffee: Double = 0.0
var body: some View {
CoffeeSlider(value: coffee)
.accessibilityActivationPoint(
UnitPoint(x: 0.5, y: 1 - coffee)
)
}
} Post accessibility announcements
// Post accessibility announcements
import SwiftUI
struct CoffeeDispenserView: View {
var coffee: Double = 0.0
var body: some View {
CoffeeSlider(value: coffee)
// ...
.onChange(of: coffee) { _, newValue in
if sufficientTimeSinceLastAnnouncement() && valueHasChanged() {
cacheLastSpokenValue(newValue)
AccessibilityNotification
.Announcement(newValue)
.post()
}
}
}
} Add custom actions
// Add custom actions
import SwiftUI
struct EqualizerView: View {
var body: some View {
EqualizerPad()
.accessibilityActions("Move Up") {
increaseY(by: 10)
}
.accessibilityActions("Move Right") {
increaseX(by: 10)
}
.accessibilityActions("Move Down") {
decreaseY(by: 10)
}
.accessibilityActions("Move Left") {
decreaseX(by: 10)
}
}
} Customize accessibility for the interactive cat surface
// Customize accessibility for the interactive cat surface
import SwiftUI
struct VirtualCat: View {
var cat: CatModel
var body: some View {
InteractiveCatSurface()
.accessibilityLabel("Virtual Cat")
.accessibilityValue(cat.currentReaction.description)
.accessibilityDirectTouch([.requiresActivation])
}
} Resources
Related sessions
-
21 min