VoiceOver spatial navigation doesn't focus elements using UISheetPresentationController with small detent

I have already filed a bug report with a sample project via Feedback Assistant: FB22760723

When presenting a UIViewController using UIModalPresentationFormSheet alongside UISheetPresentationController with a small custom detent (e.g., around 300pt height), VoiceOver spatial swipe navigation breaks.

The user is unable to swipe left or right to navigate sequentially through the accessible elements inside the sheet. Accessibility Inspector reveals that the focus seems to get trapped by the background layer (UIDimmingView / "dismiss popup").

If the sheet is taller (e.g., 600pt), the issue does not occur and swipe navigation works as expected

Steps to Reproduce:

  1. Run the attached sample Objective-C/UIKit project.

  2. Turn on VoiceOver.

  3. Tap the “Open transparent modal” button to present the modal with UIModalPresentationOverFullScreen presentation.

  4. Tap the "Open form sheet" button to present the sheet (configured with a custom 300pt detent).

  5. Attempt to swipe right using VoiceOver to navigate to the next element (e.g., from the title label to the buttons).

Expected Results: VoiceOver should smoothly navigate through the sequential accessibility elements inside the sheet's view hierarchy, respecting the bounds of the modal sheet.

Actual Results: VoiceOver gets stuck. The swipe right/left gestures fail to move focus to the next element inside the sheet. Instead, focus often escapes to the background or doesn’t change completely.

Thanks so much for the bug, I would recommend a workaround that works for me when I like to set the accessibility myself and see how it works. However, many accessibility engineers I'm sure they'll jump into this thread if they can think of a better workaround as I'm not part of that team.

VoiceOver uses a combination of the view hierarchy and screen coordinates to determine which element to focus on next during a swipe. Is the sheet very small and perhaps the sheet's bounds gets trapped by the large view behind it?

When I work on accessibility I explicitly define the accessibility boundaries and logical order for the sheet. Explicitly setting this on your presented view controller's main view tells VoiceOver to focus inside this view.

If your UI is dynamic like UITableView or UICollectionView, setting accessibilityElements on the parent view might hide the scrollable content.

In any case, I have routed the bug to the correct team to take a look.

You can see the status of your feedback in Feedback Assistant. There, you can track if the report is still being investigated, has a potential identifiable fix, or has been resolved in another way. The status appears beside the label "Resolution." We're unable to share any updates on specific reports on the forums.

For more details on when you'll see updates to your report, please see What to expect after submission.

Albert
  Worldwide Developer Relations.

VoiceOver spatial navigation doesn't focus elements using UISheetPresentationController with small detent
 
 
Q