When presenting a UI component that overlays the existing UI, you may have found that VoiceOver starts to randomly jump between the overlaid UI and the elements underneath. To avoid that, you can set its accessibilityViewIsModal to true.

An app for reading blog posts. There is an overlay indicating the user that he has read all the free posts for the month and that it needs to become a premium user for unlimited reading. With the accessibilityViewIsModal set to false, which is the default value, VoiceOver would go from elements in the screen from top-left to bottom-right, when navigating by swiping to the right. The result is as if both views were blended providing a very messy and confusing experience where VoiceOver's focus jumps from elements in the article view, to elements in the overlaying view for converting to premium. If accessibilityViewIsModal is set to true, on the other hand, VoiceOver will only focus on elements on that view, treating it as a modal. That's assuming the post view and the convert to premium view, have the same superview.

When setting the accessibilityViewIsModal to true for a view, VoiceOver will ignore its sibling views, treating it as if it was a modal. Useful when presenting custom popups, popovers, modals, action sheets, etc.

https://developer.apple.com/documentation/objectivec/nsobject-swift.class/accessibilityviewismodal

You may also find interesting...

accessibilitySpeechSpellOut asks VoiceOver to speak the sequence of characters. Can be useful for things like promo/reference/authentication codes, phone numbers... it makes more sense to announce each character rather than words and big numbers. Example code in the image: ```swift let codeLabel = UILabel() let attributedLabel = NSAttributedString( string: "BAC1234567D", attributes: [.accessibilitySpeechSpellOut: true] ) title.accessibilityAttributedLabel = attributedLabel ```

Have you ever seen VoiceOver randomly focusing on elements of the previous view when presenting a custom modal view? That can be fixed by letting the system know that the presented view is modal in terms of accessibility.

Too much data can overwhelm users. Very little is an incomplete experience. It is hard to find a balance on verbosity and the users may have different preferences. To help with this issue, the AXCustomContent APIs let you mark data as optional.

Created in Swift with Ignite.

Supporting Swift for Swifts