Thanks for being a part of WWDC25!

How did we do? We’d love to know your thoughts on this year’s conference. Take the survey here

SwiftUI List Accessibility VoiceOver

I have been working on a feature, where I have a List in SwiftUI with previous and next data loading, user can scroll up and down to load previous/next page data.

Recently, I faced one accessibility issue while testing voice-over, when user lands on the listing screen and swipe across the screen from navigation and when focus comes on list it should highlight the first item visible. But when user swipes back:

  1. Should it load the previous data and announce the previous item or it should go back to the navigation items?
  2. If it loads the previous item, what if the user wants to go to the navigation to switch to other actions and vice-versa?

Did anyone come across this kind of issue? What can be the standard expected behavior in this case if list has both previous and next page scroll? I different tried gestures https://support.apple.com/en-in/guide/iphone/iph3e2e2281/ios, but it isn't working

Designing the VoiceOver experience based off the sighted experience usually works best.

For example, if you intend a sighted user to see and read through all items in the list, then VoiceOver should iterate through all of them.

Otherwise, if your list is pre-scrolled to a certain position and you don't really expect people to scroll backwards unless for rare or intentional purposes, then design the VoiceOver focus to follow that.

In both instances, VoiceOver itself has gestures that can help the user get where they want quickly. If they're focused on elements in a long list, swiping next and previous might take a while to exit the list container. But VoiceOver users can tap directly on the screen to jump focus, and tend to understand that navigation controls are at the top of the screen. There is also a four-finger single-tap gesture on the top of the screen which jumps VoiceOver to the first element in your app.

Additionally, VoiceOver users focused on an item in a long list can use a three-finger swipe up, down, left, or right, to scroll a collection or list in that direction. So VoiceOver users can page through lists quickly while still staying in the container.

Without more info from your app it's hard to give a recommendation, but know that you can design this how you feel would be natural and VoiceOver users have tools to navigate the elements in your app pretty effectively regardless.

In a typical use case the content is paginated only while user scrolls towards the bottom of the list. This way we show the loading indicator only at the bottom while the next page is being fetched from the network API call.

However, as you can see from the attached screenshots in our use case pagination is happening both at the top and bottom.

In a typical accessibility(VoiceOver) usage scenario, when the user is in the first item of the list and she swipes right to left, the back/close button would be selected.

Now in our special use case, when the user swipes from right to left the previous page loading indicator will get selected and then it fetches the data to load more items on top.

My question now is: - How do we address this use case for an accessibility user, such that using one or more swipe gestures she can decide whether to load the previous page or go back?

SwiftUI List Accessibility VoiceOver
 
 
Q