Ga naar hoofdinhoud

Accessibility live region in SwiftUI

A live region allows users of assistive technologies to receive updates whenever important information on the screen changes.

Accessibility live region - SwiftUI

In SwiftUI, the closest thing to live regions are elements with the updatesFrequently trait. When an element is focused, label and value changes are announced periodically.

You can also replicate a live region by posting accessibility announcements. To replicate 'polite' behavior, you can set accessibilitySpeechQueueAnnouncement to false. To be 'assertive', set the value to true.

For even more advanced behavior, you can act on announcementDidFinishNotification events.

WARNING: You likely should not mix updatesFrequently trait and manual announcements. Choose one approach.

@State var stockPrice = "Stock Price: $123.45"

var body: some View {
// Periodic announcements (only on focus!)
Text(stockPrice)
// Add the updatesFrequently trait here
.accessibilityAddTraits(.updatesFrequently)
.onChange(of: stockPrice) { _, newPrice in
// Replicate live region
let message = NSAttributedString(
string: newPrice,
attributes: [.accessibilitySpeechQueueAnnouncement: true]
)
UIAccessibility.post(notification: .announcement, argument: message)
}
}