diff --git a/packages/react-native/React/CoreModules/RCTAppearance.h b/packages/react-native/React/CoreModules/RCTAppearance.h index 9909ca9e741..177ac433a12 100644 --- a/packages/react-native/React/CoreModules/RCTAppearance.h +++ b/packages/react-native/React/CoreModules/RCTAppearance.h @@ -13,6 +13,7 @@ RCT_EXTERN void RCTEnableAppearancePreference(BOOL enabled); RCT_EXTERN void RCTOverrideAppearancePreference(NSString *const); +RCT_EXTERN void RCTUseKeyWindowForSystemStyle(BOOL useMainScreen); RCT_EXTERN NSString *RCTCurrentOverrideAppearancePreference(); RCT_EXTERN NSString *RCTColorSchemePreference(UITraitCollection *traitCollection); diff --git a/packages/react-native/React/CoreModules/RCTAppearance.mm b/packages/react-native/React/CoreModules/RCTAppearance.mm index 2ad68a58946..4f7350faad7 100644 --- a/packages/react-native/React/CoreModules/RCTAppearance.mm +++ b/packages/react-native/React/CoreModules/RCTAppearance.mm @@ -31,6 +31,12 @@ void RCTOverrideAppearancePreference(NSString *const colorSchemeOverride) sColorSchemeOverride = colorSchemeOverride; } +static BOOL sUseKeyWindowForSystemStyle = NO; +void RCTUseKeyWindowForSystemStyle(BOOL useMainScreen) +{ + sUseKeyWindowForSystemStyle = useMainScreen; +} + NSString *RCTCurrentOverrideAppearancePreference() { return sColorSchemeOverride; @@ -56,8 +62,9 @@ NSString *RCTColorSchemePreference(UITraitCollection *traitCollection) // Return the default if the app doesn't allow different color schemes. return RCTAppearanceColorSchemeLight; } - - return appearances[@(traitCollection.userInterfaceStyle)] ?: RCTAppearanceColorSchemeLight; + UIUserInterfaceStyle systemStyle = sUseKeyWindowForSystemStyle ? RCTKeyWindow().traitCollection.userInterfaceStyle + : traitCollection.userInterfaceStyle; + return appearances[@(systemStyle)] ?: RCTAppearanceColorSchemeLight; } @interface RCTAppearance ()