aria-modal on View Does Nothing on iOS
The View docs list aria-modal as an iOS prop that takes precedence over
accessibilityViewIsModal. In React Native 0.88 View does not pass it to the
native view: with aria-modal VoiceOver still reaches the background of a
custom dialog, with accessibilityViewIsModal it does not.
- Checked: 21 October 2026
- Versions: React Native 0.88.0, Expo SDK 58 (development build)
- Devices: iPhone, iOS 27, VoiceOver
- Upstream:
react/react-native#59328:
landed in
main
How It Was Checked
The modal case of Memo Lab: a
screen with three background buttons and a custom overlay that is their sibling.
With the dialog open, swipe right through all elements, then touch where a
background button is.
<View style={{ flex: 1 }}>
<View style={{ flex: 1, padding: 48, gap: 16 }}>
{['One', 'Two', 'Three'].map((title) => (
<Pressable key={title} role="button">
<Text>Background item {title}</Text>
</Pressable>
))}
</View>
<View
aria-modal // or accessibilityViewIsModal
style={{ position: 'absolute', inset: 0, justifyContent: 'center' }}
>
<Text role="heading">Dialog</Text>
<Pressable role="button" onPress={close}>
<Text>Close</Text>
</Pressable>
</View>
</View>
Result
aria-modal: swiping goes past "Close" to the background buttons, and touching them focuses them.accessibilityViewIsModal: focus stays inside the dialog.- The cause:
Viewconverts the otheraria-*props toaccessibility*, but notaria-modal, and the native side reads onlyaccessibilityViewIsModal.PressableandTouchable*do map it. - Not affected: Android has no modal prop at all, there the background is hidden
with
aria-hidden(importantForAccessibility="no-hide-descendants").
Upstream
react/react-native#59328
maps aria-modal to accessibilityViewIsModal in View. It landed in main
on 23 October 2026; on 27 October 2026 it is not in a release (0.88.1 does not
include it).