diff --git a/packages/react-native/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm b/packages/react-native/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm index 5571b5350bff..1d1ed3c0041c 100644 --- a/packages/react-native/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm +++ b/packages/react-native/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm @@ -723,6 +723,13 @@ - (void)prepareForRecycle _removeClippedSubviews = NO; _reactSubviews = [NSMutableArray new]; _layoutMetrics = {}; + + // Reset accessibilityViewIsModal so it does not leak across recycled views. + // updateProps only writes this property when (oldProps != newProps); after a + // view is recycled _props resets to the default (NO), so a recycled view that + // is reused without the prop keeps the stale YES and traps VoiceOver / UI + // automation against a now-unrelated subtree (empty accessibility tree). + self.accessibilityElement.accessibilityViewIsModal = NO; } - (void)setPropKeysManagedByAnimated_DO_NOT_USE_THIS_IS_BROKEN:(NSSet *_Nullable)props