diff --git a/FabricExample/App.tsx b/FabricExample/App.tsx index e5d153146f..1f3c1d79b1 100644 --- a/FabricExample/App.tsx +++ b/FabricExample/App.tsx @@ -2,7 +2,7 @@ import App from '../apps'; import { featureFlags } from 'react-native-screens'; featureFlags.experiment.synchronousScreenUpdatesEnabled = false; -featureFlags.experiment.synchronousHeaderConfigUpdatesEnabled = false; +featureFlags.experiment.synchronousHeaderConfigUpdatesEnabled = true; featureFlags.experiment.synchronousHeaderSubviewUpdatesEnabled = false; featureFlags.experiment.androidResetScreenShadowStateOnOrientationChangeEnabled = true; diff --git a/ios/RNSScreenStackHeaderConfig.mm b/ios/RNSScreenStackHeaderConfig.mm index 5970e3e3a6..253d7d5fbd 100644 --- a/ios/RNSScreenStackHeaderConfig.mm +++ b/ios/RNSScreenStackHeaderConfig.mm @@ -82,6 +82,7 @@ - (void)initProps _reactSubviews = [NSMutableArray new]; _backTitleVisible = YES; _blurEffect = RNSBlurEffectStyleNone; + _synchronousShadowStateUpdatesEnabled = YES; } RNS_IGNORE_SUPER_CALL_BEGIN @@ -281,11 +282,10 @@ - (UIImage *)loadBackButtonImageInViewController:(UIViewController *)vc // in the image attribute not being updated. We manually set frame to the size of an image // in order to trigger proper reload that'd update the image attribute. RCTImageSource *imageSource = [RNSScreenStackHeaderConfig imageSourceFromImageView:imageView]; - [imageView reactSetFrame:CGRectMake( - imageView.frame.origin.x, - imageView.frame.origin.y, - imageSource.size.width, - imageSource.size.height)]; + [imageView reactSetFrame:CGRectMake(imageView.frame.origin.x, + imageView.frame.origin.y, + imageSource.size.width, + imageSource.size.height)]; } UIImage *image = imageView.image; @@ -847,13 +847,12 @@ - (void)mountChildComponentView:(UIView *)childCompone return; } - RCTAssert( - childComponentView.superview == nil, - @"Attempt to mount already mounted component view. (parent: %@, child: %@, index: %@, existing parent: %@)", - self, - childComponentView, - @(index), - @([childComponentView.superview tag])); + RCTAssert(childComponentView.superview == nil, + @"Attempt to mount already mounted component view. (parent: %@, child: %@, index: %@, existing parent: %@)", + self, + childComponentView, + @(index), + @([childComponentView.superview tag])); // [_reactSubviews insertObject:(RNSScreenStackHeaderSubview *)childComponentView atIndex:index]; [self insertReactSubview:(RNSScreenStackHeaderSubview *)childComponentView atIndex:index]; @@ -1130,23 +1129,21 @@ @implementation RNSScreenStackHeaderConfigManager @implementation RCTConvert (RNSScreenStackHeader) -RCT_ENUM_CONVERTER( - UISemanticContentAttribute, - (@{ - @"ltr" : @(UISemanticContentAttributeForceLeftToRight), - @"rtl" : @(UISemanticContentAttributeForceRightToLeft), - }), - UISemanticContentAttributeUnspecified, - integerValue) - -RCT_ENUM_CONVERTER( - UINavigationItemBackButtonDisplayMode, - (@{ - @"default" : @(UINavigationItemBackButtonDisplayModeDefault), - @"generic" : @(UINavigationItemBackButtonDisplayModeGeneric), - @"minimal" : @(UINavigationItemBackButtonDisplayModeMinimal), - }), - UINavigationItemBackButtonDisplayModeDefault, - integerValue) +RCT_ENUM_CONVERTER(UISemanticContentAttribute, + (@{ + @"ltr" : @(UISemanticContentAttributeForceLeftToRight), + @"rtl" : @(UISemanticContentAttributeForceRightToLeft), + }), + UISemanticContentAttributeUnspecified, + integerValue) + +RCT_ENUM_CONVERTER(UINavigationItemBackButtonDisplayMode, + (@{ + @"default" : @(UINavigationItemBackButtonDisplayModeDefault), + @"generic" : @(UINavigationItemBackButtonDisplayModeGeneric), + @"minimal" : @(UINavigationItemBackButtonDisplayModeMinimal), + }), + UINavigationItemBackButtonDisplayModeDefault, + integerValue) @end diff --git a/src/fabric/ScreenStackHeaderConfigNativeComponent.ts b/src/fabric/ScreenStackHeaderConfigNativeComponent.ts index ba2479de0f..66388ce8cb 100644 --- a/src/fabric/ScreenStackHeaderConfigNativeComponent.ts +++ b/src/fabric/ScreenStackHeaderConfigNativeComponent.ts @@ -80,7 +80,7 @@ export interface NativeProps extends ViewProps { onPressHeaderBarButtonMenuItem?: | CT.DirectEventHandler | undefined; - synchronousShadowStateUpdatesEnabled?: CT.WithDefault; + synchronousShadowStateUpdatesEnabled?: CT.WithDefault; // Experimental userInterfaceStyle?: CT.WithDefault; diff --git a/src/flags.ts b/src/flags.ts index 731b70c141..b6b2b50d8e 100644 --- a/src/flags.ts +++ b/src/flags.ts @@ -1,5 +1,5 @@ const RNS_SYNCHRONOUS_SCREEN_STATE_UPDATES_DEFAULT = false; -const RNS_SYNCHRONOUS_HEADER_CONFIG_STATE_UPDATES_DEFAULT = false; +const RNS_SYNCHRONOUS_HEADER_CONFIG_STATE_UPDATES_DEFAULT = true; const RNS_SYNCHRONOUS_HEADER_SUBVIEW_STATE_UPDATES_DEFAULT = false; const RNS_ANDROID_LEGACY_TOP_INSET_BEHAVIOR_DEFAULT = false; const RNS_ANDROID_RESET_SCREEN_SHADOW_STATE_ON_ORIENTATION_CHANGE_DEFAULT =