Voiceover doesn't announce SwiftUI list positions?

By Ashley, 10 August, 2026

Forum
App Development and Programming

Hey all, hoping someone out there can help with an unbelieveably frustrating issue.

I'm currently working on an iOS app and having trouble with Voiceover not announcing the list position in SwiftUI lists, which a tester has requested. The below code helps to demonstrate the issue by creating a simple SwiftUI list with a collection of 100 rows. However it does not seem to provide VoiceOver with each focused row’s position and the total item count.

STEPS TO REPRODUCE
1. Run the attached sample on a physical iPhone running iOS 26.
2. Open Settings → Accessibility → VoiceOver → Verbosity → List Position and select Speak.
3. Open the sample app and focus “Row 1”.
4. Flick right through several rows, or touch to focus any row.

Actual result: VoiceOver speaks each row’s label but never communicates its position or the total of 100 rows. A three-finger tap also omits the list position.

Expected result: SwiftUI List should expose the known collection size and each row’s ordinal so VoiceOver can announce positional information according to the user’s List Position verbosity preference. For example, "Row 19, 19 of 100"

import SwiftUI
struct ContentView: View {
private let rows = Array(1...100)
var body: some View {
NavigationStack {
List(rows, id: \.self) { row in
Button("Row \(row)") {}
}
.navigationTitle("List position test")
}
}
}

Any solutions to overcome this?

Options

Comments

By Brian on Monday, August 10, 2026 - 21:10

Disclaimer: this is not my code.

I'm not sure if this is exactly what you're looking for, but I found what I believe is an answer to a similar situation on stack overflow. Check out the code below, and tell me if any or all of that is useful to you. If not, then just disregard. Of all the programming languages I learned, Swift was not one of them, so I had to do a little googling here.

// Source - https://stackoverflow.com/a/56437491
// Posted by Jake, modified by community. See post 'Timeline' for change history
// Retrieved 2026-08-10, License - CC BY-SA 4.0

import SwiftUI

struct ContentView : View {
var body: some View {
NavigationView {
VStack {
Text("Hello World")
NavigationLink(destination: DetailView()) {
Text("Do Something")
}
}
}
}
}

By Ashley on Monday, August 10, 2026 - 21:23

Thanks, but no. The issue I'm having is getting SwiftUI's native lists to play nicely with voiceover, not to get the buttons working. I have a [perfect native SwiftUI that works great, the only exception being the list not presenting positional information to Voiceover. I can drop back into UIKit and implement a table overlay for voiceover users but that breaks the UI in many ways and it's just a pain. I can't believe they'd have missed this in the API so i'm hoping it's just something I missed but no ammount of searching has turned up a solution.

By Brian on Monday, August 10, 2026 - 23:38

Wish I had studied swift back in college, but alas, that one I skipped. It was very, very new back then, so unfortunately never got into it.
Sorry I could not be more helpful. 🤷

By Ashley on Tuesday, August 11, 2026 - 07:30

Thanks Brian, I really appreciate your efforts. Sadly I don’t think there actually is a solution to this one. I’ve submitted a code-level request to Apple.