Custom actions are also great for actions that are executed with a gesture that is overridden by VoiceOver. Think of the unread, flag and archive hidden options that you can make visible by swiping left/right on a message row in the Mail app.

The mail app lets you swipe to the right in a message row to unveil an Unread option. You can swipe left to unveil the More, Flag and archive options. With VoiceOver, those same gestures would bring you to the next and previous elements in the screen instead. You can put those kind of options in the custom actions of the row. That way, when the row is focused, you can swipe up/down to cycle through the different actions, and double tap to execute them.

You may also find interesting...

If an image does not convey additional information, maybe it's just used to make the UI look more attractive, it makes sense for VoiceOver to skip it. UIKit: set isAccessibilityElement to false. SwiftUI: create a decorative image explicitly.

You can add an observer to listen for changes in the content size category, in case it is more convenient than overriding traitCollectionDidChange(_:).

Guidelines from Apple: Begin with a verb that explains the results of the action. Avoid using the imperative form of a verb because that can make it sound like a command. Don’t include the action type. Don’t include the control. https://developer.apple.com/documentation/objectivec/nsobject-swift.class/accessibilityhint

Created in Swift with Ignite.

Supporting Swift for Swifts