From 515216b407bc810a7c67e10f53a5e5efc074e665 Mon Sep 17 00:00:00 2001 From: Dmitry Zhigulin Date: Thu, 22 Oct 2026 10:56:56 +0400 Subject: [PATCH] fix(View): do not flatten a view that is a live region --- .../Components/View/__tests__/View-itest.js | 18 ++++++++++++++++-- .../components/view/ViewShadowNode.cpp | 1 + 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/packages/react-native/Libraries/Components/View/__tests__/View-itest.js b/packages/react-native/Libraries/Components/View/__tests__/View-itest.js index 4e3ebfbf8425..bdff6a1145d7 100644 --- a/packages/react-native/Libraries/Components/View/__tests__/View-itest.js +++ b/packages/react-native/Libraries/Components/View/__tests__/View-itest.js @@ -601,7 +601,7 @@ describe('', () => { ).toEqual(); }); - it('does not unflatten view', () => { + it('unflattens view', () => { const root = Fantom.createRoot(); Fantom.runTask(() => { @@ -612,7 +612,7 @@ describe('', () => { root .getRenderedOutput({props: ['accessibilityLiveRegion']}) .toJSX(), - ).toEqual(null); + ).toEqual(); }); }); @@ -841,6 +841,20 @@ describe('', () => { .toJSX(), ).toEqual(); }); + + it('keeps the view from being flattened', () => { + const root = Fantom.createRoot(); + + Fantom.runTask(() => { + root.render(); + }); + + expect( + root + .getRenderedOutput({props: ['accessibilityLiveRegion']}) + .toJSX(), + ).toEqual(); + }); }); describe('aria-busy', () => { diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/ViewShadowNode.cpp b/packages/react-native/ReactCommon/react/renderer/components/view/ViewShadowNode.cpp index 035a657af1b4..b3d396e263c1 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/ViewShadowNode.cpp +++ b/packages/react-native/ReactCommon/react/renderer/components/view/ViewShadowNode.cpp @@ -53,6 +53,7 @@ void ViewShadowNode::initialize() noexcept { isColorMeaningful(viewProps.shadowColor) || viewProps.accessibilityElementsHidden || viewProps.accessibilityViewIsModal || + viewProps.accessibilityLiveRegion != AccessibilityLiveRegion::None || viewProps.importantForAccessibility != ImportantForAccessibility::Auto || viewProps.removeClippedSubviews || viewProps.cursor != Cursor::Auto || viewProps.onSafeAreaInsetsChange || !viewProps.filter.empty() ||