From f7451e7c719e846e09a76ef8f012691e97284473 Mon Sep 17 00:00:00 2001 From: Mathieu Acthernoene Date: Wed, 17 Jun 2026 15:46:07 +0200 Subject: [PATCH 1/3] fix: prevent iOS Alert from rendering in the top-left corner --- packages/react-native/React/CoreModules/RCTAlertController.mm | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/react-native/React/CoreModules/RCTAlertController.mm b/packages/react-native/React/CoreModules/RCTAlertController.mm index b275ebc5c67e..e8b13f071798 100644 --- a/packages/react-native/React/CoreModules/RCTAlertController.mm +++ b/packages/react-native/React/CoreModules/RCTAlertController.mm @@ -23,6 +23,7 @@ - (UIWindow *)alertWindow UIWindowScene *scene = RCTKeyWindow().windowScene; if (scene != nil) { _alertWindow = [[UIWindow alloc] initWithWindowScene:scene]; + _alertWindow.frame = scene.coordinateSpace.bounds; } else { _alertWindow = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds]; } From b36b0b046d978a54cd92f339ff23590ce88dbdc7 Mon Sep 17 00:00:00 2001 From: Mathieu Acthernoene Date: Wed, 17 Jun 2026 15:46:16 +0200 Subject: [PATCH 2/3] fix: prevent iOS Modal from rendering in the top-left corner --- .../renderer/components/modal/ModalHostViewUtils.mm | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/react-native/ReactCommon/react/renderer/components/modal/ModalHostViewUtils.mm b/packages/react-native/ReactCommon/react/renderer/components/modal/ModalHostViewUtils.mm index 84be3c36c3d9..ef7e3a2b1894 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/modal/ModalHostViewUtils.mm +++ b/packages/react-native/ReactCommon/react/renderer/components/modal/ModalHostViewUtils.mm @@ -13,8 +13,16 @@ Size ModalHostViewScreenSize(void) { - CGSize screenSize = RCTScreenSize(); - return {.width = screenSize.width, .height = screenSize.height}; + __block CGSize viewportSize; + + RCTUnsafeExecuteOnMainQueueSync(^{ + viewportSize = RCTViewportSize(); + }); + + return { + .width = viewportSize.width, + .height = viewportSize.height, + }; } } // namespace facebook::react From bdd45e405bdf9a4462e1845e99fae5744f64c067 Mon Sep 17 00:00:00 2001 From: Mathieu Acthernoene Date: Tue, 23 Jun 2026 11:09:55 +0200 Subject: [PATCH 3/3] Prevent RCTScreenSize from caching a zero screen size --- packages/react-native/React/Base/RCTUtils.mm | 6 +++--- .../renderer/components/modal/ModalHostViewUtils.mm | 12 ++---------- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/packages/react-native/React/Base/RCTUtils.mm b/packages/react-native/React/Base/RCTUtils.mm index 4a0e1ca40b6b..1ad5afb525c1 100644 --- a/packages/react-native/React/Base/RCTUtils.mm +++ b/packages/react-native/React/Base/RCTUtils.mm @@ -384,13 +384,13 @@ UIDeviceOrientation RCTDeviceOrientation(void) CGSize RCTScreenSize(void) { static CGSize portraitSize; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ + + if (CGSizeEqualToSize(portraitSize, CGSizeZero)) { RCTUnsafeExecuteOnMainQueueSync(^{ CGSize screenSize = [UIScreen mainScreen].bounds.size; portraitSize = CGSizeMake(MIN(screenSize.width, screenSize.height), MAX(screenSize.width, screenSize.height)); }); - }); + } #if !TARGET_OS_TV if (UIDeviceOrientationIsLandscape(RCTDeviceOrientation())) { diff --git a/packages/react-native/ReactCommon/react/renderer/components/modal/ModalHostViewUtils.mm b/packages/react-native/ReactCommon/react/renderer/components/modal/ModalHostViewUtils.mm index ef7e3a2b1894..84be3c36c3d9 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/modal/ModalHostViewUtils.mm +++ b/packages/react-native/ReactCommon/react/renderer/components/modal/ModalHostViewUtils.mm @@ -13,16 +13,8 @@ Size ModalHostViewScreenSize(void) { - __block CGSize viewportSize; - - RCTUnsafeExecuteOnMainQueueSync(^{ - viewportSize = RCTViewportSize(); - }); - - return { - .width = viewportSize.width, - .height = viewportSize.height, - }; + CGSize screenSize = RCTScreenSize(); + return {.width = screenSize.width, .height = screenSize.height}; } } // namespace facebook::react