react-native-navigation 8.7.6-snapshot.2279 → 8.7.6-snapshot.2352

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -232,11 +232,11 @@ public class NavigationModule extends ReactContextBaseJavaModule {
232
232
  }
233
233
 
234
234
  @Override
235
- public void onCatalystInstanceDestroy() {
235
+ public void invalidate() {
236
236
  final NavigationActivity navigationActivity = activity();
237
237
  if (navigationActivity != null) {
238
238
  navigationActivity.onCatalystInstanceDestroy();
239
239
  }
240
- super.onCatalystInstanceDestroy();
240
+ super.invalidate();
241
241
  }
242
242
  }
@@ -11,6 +11,7 @@ import android.view.View
11
11
  import android.view.ViewGroup
12
12
  import androidx.appcompat.widget.ActionMenuView
13
13
  import androidx.appcompat.widget.Toolbar
14
+ import com.reactnativenavigation.R
14
15
  import com.reactnativenavigation.utils.ObjectUtils
15
16
  import com.reactnativenavigation.utils.ViewUtils
16
17
  import com.reactnativenavigation.viewcontrollers.stack.topbar.button.ButtonController
@@ -21,6 +22,7 @@ open class ButtonBar internal constructor(context: Context) : Toolbar(context) {
21
22
  init {
22
23
  super.setContentInsetsAbsolute(0, 0)
23
24
  this.contentInsetStartWithNavigation = 0
25
+ setPopupTheme(R.style.TopBarOverflowPopup)
24
26
  }
25
27
 
26
28
  override fun onViewAdded(child: View) {
@@ -8,12 +8,12 @@ import com.reactnativenavigation.options.params.DensityPixel
8
8
 
9
9
 
10
10
  class IconBackgroundDrawable(
11
- private val wrapped: Drawable,
12
- private val cornerRadius: DensityPixel,
13
- private val backgroundWidth: Int,
14
- private val backgroundHeight: Int,
15
- private val iconColor: Int?,
16
- val backgroundColor: Int?
11
+ private val wrapped: Drawable,
12
+ private val cornerRadius: DensityPixel,
13
+ private val backgroundWidth: Int,
14
+ private val backgroundHeight: Int,
15
+ private val iconColor: Int?,
16
+ val backgroundColor: Int?
17
17
  ) : Drawable() {
18
18
  private val path: Path = Path()
19
19
  private val bitmapPaint = Paint().apply {
@@ -56,28 +56,31 @@ class IconBackgroundDrawable(
56
56
  canvas.drawBitmap(wrapped.toBitmap(), null, bitmapRect, bitmapPaint)
57
57
  }
58
58
 
59
+ override fun getIntrinsicWidth(): Int = backgroundWidth
60
+ override fun getIntrinsicHeight(): Int = backgroundHeight
61
+
59
62
  override fun setBounds(l: Int, t: Int, r: Int, b: Int) {
60
- updatePath(RectF(l.toFloat(), t.toFloat(), backgroundWidth.toFloat(), backgroundHeight.toFloat()))
61
- super.setBounds(l, t, backgroundWidth, backgroundHeight)
63
+ updatePath(RectF(0f, 0f, backgroundWidth.toFloat(), backgroundHeight.toFloat()))
64
+ super.setBounds(l, t, l + backgroundWidth, t + backgroundHeight)
62
65
  }
63
66
 
64
67
  override fun setBounds(r: Rect) {
65
- r.right = backgroundWidth
66
- r.bottom = backgroundHeight
67
- updatePath(RectF(r))
68
+ r.right = r.left + backgroundWidth
69
+ r.bottom = r.top + backgroundHeight
70
+ updatePath(RectF(0f, 0f, backgroundWidth.toFloat(), backgroundHeight.toFloat()))
68
71
  super.setBounds(r)
69
72
  }
70
73
 
71
74
  override fun onBoundsChange(bounds: Rect) {
72
75
  if (bounds != null) {
73
76
  backgroundRect = Rect((bounds.width() - backgroundWidth) / 2,
74
- (bounds.height() - backgroundHeight) / 2,
75
- bounds.width() - (bounds.width() - backgroundWidth) / 2,
76
- bounds.height() - (bounds.height() - backgroundHeight) / 2)
77
+ (bounds.height() - backgroundHeight) / 2,
78
+ bounds.width() - (bounds.width() - backgroundWidth) / 2,
79
+ bounds.height() - (bounds.height() - backgroundHeight) / 2)
77
80
  bitmapRect = Rect((bounds.width() - bitmapWidth) / 2,
78
- (bounds.height() - bitmapHeight) / 2,
79
- bounds.width() - (bounds.width() - bitmapWidth) / 2,
80
- bounds.height() - (bounds.height() - bitmapHeight) / 2)
81
+ (bounds.height() - bitmapHeight) / 2,
82
+ bounds.width() - (bounds.width() - bitmapWidth) / 2,
83
+ bounds.height() - (bounds.height() - bitmapHeight) / 2)
81
84
  }
82
85
  super.onBoundsChange(bounds)
83
86
  }
@@ -17,7 +17,8 @@ typealias TitleBottom = Int
17
17
 
18
18
  fun makeTitleAtMostWidthMeasureSpec(containerWidth: Int, rightBarWidth: Int, leftBarWidth: Int, isCenter: Boolean, isFill: Boolean = false): Int {
19
19
  return if (isCenter) {
20
- View.MeasureSpec.makeMeasureSpec(containerWidth, View.MeasureSpec.AT_MOST)
20
+ val availableWidth = containerWidth - rightBarWidth - leftBarWidth
21
+ View.MeasureSpec.makeMeasureSpec(availableWidth, View.MeasureSpec.AT_MOST)
21
22
  } else {
22
23
  val availableWidth = containerWidth - rightBarWidth - leftBarWidth - 2 * DEFAULT_LEFT_MARGIN_PX
23
24
  View.MeasureSpec.makeMeasureSpec(
@@ -3,25 +3,22 @@ package com.reactnativenavigation.views.stack.topbar.titlebar
3
3
  import android.annotation.SuppressLint
4
4
  import android.content.Context
5
5
  import android.view.View
6
- import android.view.ViewGroup
7
- import androidx.core.view.children
8
- import com.facebook.react.ReactInstanceManager
9
6
  import com.reactnativenavigation.react.ReactView
10
7
 
11
8
  @SuppressLint("ViewConstructor")
12
9
  class TitleBarReactView(context: Context?, componentId: String?,
13
10
  componentName: String?) : ReactView(context, componentId, componentName) {
14
11
  var centered: Boolean = false
12
+
15
13
  override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
16
- var titleHeightMeasureSpec: Int
17
- var titleWidthMeasureSpec: Int
18
14
  if (centered) {
19
- titleHeightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)
20
- titleWidthMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)
15
+ val availableWidth = MeasureSpec.getSize(widthMeasureSpec)
16
+ super.onMeasure(
17
+ MeasureSpec.makeMeasureSpec(availableWidth, MeasureSpec.AT_MOST),
18
+ heightMeasureSpec
19
+ )
21
20
  } else {
22
- titleHeightMeasureSpec = heightMeasureSpec
23
- titleWidthMeasureSpec = widthMeasureSpec
21
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec)
24
22
  }
25
- super.onMeasure(titleWidthMeasureSpec, titleHeightMeasureSpec)
26
23
  }
27
24
  }
@@ -4,6 +4,8 @@
4
4
  <item name="elevation">0dp</item>
5
5
  </style>
6
6
 
7
+ <style name="TopBarOverflowPopup" parent="ThemeOverlay.AppCompat.Light" />
8
+
7
9
  <!--The following is a workaround needed to run unit tests in command line-->
8
10
  <style name="Widget.Support.CoordinatorLayout" parent="android:Widget">
9
11
  @null
@@ -8,7 +8,38 @@
8
8
  [bottomTabsController readyForPresentation];
9
9
  for (UIViewController *viewController in bottomTabsController.deselectedViewControllers) {
10
10
  dispatch_async(dispatch_get_main_queue(), ^{
11
+ UIWindow *preloadWindow = [[UIWindow alloc] initWithFrame:CGRectZero];
12
+ preloadWindow.hidden = NO;
13
+
14
+ dispatch_group_t ready = dispatch_group_create();
15
+ dispatch_group_enter(ready);
16
+
17
+ viewController.waitForRender = YES;
18
+
19
+ [viewController setReactViewReadyCallback:^{
20
+ dispatch_group_leave(ready);
21
+ }];
22
+
11
23
  [viewController render];
24
+
25
+ UIView *containerView = nil;
26
+ UIView *reactView = nil;
27
+ if ([viewController isKindOfClass:[UINavigationController class]]) {
28
+ containerView = [(UINavigationController *)viewController topViewController].view;
29
+ reactView = containerView.subviews.firstObject;
30
+ }
31
+
32
+ if (reactView && !reactView.window) {
33
+ [preloadWindow addSubview:reactView];
34
+ }
35
+
36
+ dispatch_notify(ready, dispatch_get_main_queue(), ^{
37
+ if (reactView) {
38
+ reactView.frame = containerView.bounds;
39
+ [containerView addSubview:reactView];
40
+ }
41
+ preloadWindow.hidden = YES;
42
+ });
12
43
  });
13
44
  }
14
45
  }];
@@ -7,6 +7,11 @@
7
7
  #pragma mark - public
8
8
 
9
9
  - (void)applyBackgroundColor:(UIColor *)backgroundColor translucent:(BOOL)translucent {
10
+ if (@available(iOS 26.0, *)) {
11
+ [self setTabBarTransparentBackground];
12
+ self.tabBar.backgroundColor = UIColor.clearColor;
13
+ return;
14
+ }
10
15
  if (translucent)
11
16
  [self setTabBarTranslucent:YES];
12
17
  else if (backgroundColor.isTransparent)
@@ -19,26 +24,33 @@
19
24
 
20
25
  - (void)applyTabBarBorder:(RNNBottomTabsOptions *)options {
21
26
  if (options.borderColor.hasValue || options.borderWidth.hasValue) {
22
- for (UIViewController *childViewController in self.tabBarController.childViewControllers)
23
- childViewController.tabBarItem.standardAppearance.shadowImage = [UIImage
24
- imageWithSize:CGSizeMake(1.0, [[options.borderWidth withDefault:@(0.1)] floatValue])
25
- color:[options.borderColor withDefault:UIColor.blackColor]];
27
+ UIImage *borderImage = [UIImage
28
+ imageWithSize:CGSizeMake(1.0, [[options.borderWidth withDefault:@(0.1)] floatValue])
29
+ color:[options.borderColor withDefault:UIColor.blackColor]];
30
+
31
+ for (UIViewController *childViewController in self.tabBarController.childViewControllers) {
32
+ childViewController.tabBarItem.standardAppearance.shadowImage = borderImage;
33
+ #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 150000
34
+ if (@available(iOS 15.0, *)) {
35
+ childViewController.tabBarItem.scrollEdgeAppearance.shadowImage = borderImage;
36
+ }
37
+ #endif
38
+ }
26
39
  }
27
40
  }
28
41
 
29
42
  - (void)setTabBarBackgroundColor:(UIColor *)backgroundColor {
30
- [self setTabBarOpaqueBackground];
31
- for (UIViewController *childViewController in self.tabBarController.childViewControllers) {
32
- childViewController.tabBarItem.standardAppearance.backgroundColor = backgroundColor;
33
- #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 150000
34
- if (@available(iOS 15.0, *)) {
35
- childViewController.tabBarItem.scrollEdgeAppearance.backgroundColor = backgroundColor;
36
- }
37
- #endif
43
+ UITabBarAppearance *appearance = [self appearanceWithColor:backgroundColor];
44
+ [self applyTabBarAppearance:appearance];
45
+ self.tabBar.barTintColor = backgroundColor;
46
+ self.tabBar.translucent = NO;
47
+ if (@available(iOS 26.0, *)) {
48
+ self.tabBar.backgroundColor = backgroundColor;
38
49
  }
39
50
  }
40
51
 
41
52
  - (void)setTabBarTranslucent:(BOOL)translucent {
53
+ self.tabBar.translucent = translucent;
42
54
  if (translucent)
43
55
  [self setTabBarTranslucentBackground];
44
56
  else
@@ -48,38 +60,63 @@
48
60
  #pragma mark - private
49
61
 
50
62
  - (void)setTabBarDefaultBackground {
51
- [self setTabBarOpaqueBackground];
63
+ if (@available(iOS 26.0, *)) {
64
+ [self setTabBarTransparentBackground];
65
+ self.tabBar.backgroundColor = UIColor.clearColor;
66
+ } else {
67
+ [self setTabBarOpaqueBackground];
68
+ }
52
69
  }
53
70
 
54
71
  - (void)setTabBarTranslucentBackground {
55
- for (UIViewController *childViewController in self.tabBarController.childViewControllers) {
56
- [childViewController.tabBarItem.standardAppearance configureWithDefaultBackground];
57
- #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 150000
58
- if (@available(iOS 15.0, *)) {
59
- [childViewController.tabBarItem.scrollEdgeAppearance configureWithDefaultBackground];
60
- }
61
- #endif
62
- }
72
+ UITabBarAppearance *appearance = [UITabBarAppearance new];
73
+ [appearance configureWithDefaultBackground];
74
+ [self applyTabBarAppearance:appearance];
75
+ self.tabBar.barTintColor = nil;
63
76
  }
64
77
 
65
78
  - (void)setTabBarTransparentBackground {
66
- for (UIViewController *childViewController in self.tabBarController.childViewControllers) {
67
- [childViewController.tabBarItem.standardAppearance configureWithTransparentBackground];
68
- #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 150000
69
- if (@available(iOS 15.0, *)) {
70
- [childViewController.tabBarItem
71
- .scrollEdgeAppearance configureWithTransparentBackground];
72
- }
73
- #endif
74
- }
79
+ UITabBarAppearance *appearance = [UITabBarAppearance new];
80
+ [appearance configureWithTransparentBackground];
81
+ appearance.backgroundEffect = nil;
82
+ appearance.backgroundColor = UIColor.clearColor;
83
+ [self applyTabBarAppearance:appearance];
84
+ self.tabBar.barTintColor = UIColor.clearColor;
75
85
  }
76
86
 
77
87
  - (void)setTabBarOpaqueBackground {
88
+ UITabBarAppearance *appearance = [self appearanceWithColor:nil];
89
+ [self applyTabBarAppearance:appearance];
90
+ self.tabBar.barTintColor = UIColor.systemBackgroundColor;
91
+ self.tabBar.translucent = NO;
92
+ }
93
+
94
+ #pragma mark - helpers
95
+
96
+ - (UITabBarAppearance *)appearanceWithColor:(UIColor *)color {
97
+ UITabBarAppearance *appearance = [UITabBarAppearance new];
98
+ [appearance configureWithOpaqueBackground];
99
+ appearance.backgroundEffect = nil;
100
+ appearance.shadowColor = nil;
101
+ UIColor *resolvedColor = color ?: UIColor.systemBackgroundColor;
102
+ appearance.backgroundColor = resolvedColor;
103
+ appearance.backgroundImage = [UIImage imageWithSize:CGSizeMake(1, 1) color:resolvedColor];
104
+ return appearance;
105
+ }
106
+
107
+ - (void)applyTabBarAppearance:(UITabBarAppearance *)appearance {
108
+ self.tabBar.standardAppearance = appearance;
109
+ #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 150000
110
+ if (@available(iOS 15.0, *)) {
111
+ self.tabBar.scrollEdgeAppearance = [appearance copy];
112
+ }
113
+ #endif
114
+
78
115
  for (UIViewController *childViewController in self.tabBarController.childViewControllers) {
79
- [childViewController.tabBarItem.standardAppearance configureWithOpaqueBackground];
116
+ childViewController.tabBarItem.standardAppearance = [appearance copy];
80
117
  #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 150000
81
118
  if (@available(iOS 15.0, *)) {
82
- [childViewController.tabBarItem.scrollEdgeAppearance configureWithOpaqueBackground];
119
+ childViewController.tabBarItem.scrollEdgeAppearance = [appearance copy];
83
120
  }
84
121
  #endif
85
122
  }
@@ -27,11 +27,12 @@
27
27
  [bottomTabs setTabBarVisible:[withDefault.bottomTabs.visible withDefault:YES]];
28
28
 
29
29
  [bottomTabs.view setBackgroundColor:[withDefault.layout.backgroundColor withDefault:nil]];
30
+ [bottomTabs setTabBarHideShadow:[withDefault.bottomTabs.hideShadow withDefault:NO]];
31
+ if (options.bottomTabs.barStyle.hasValue) {
32
+ [bottomTabs setTabBarStyle:[RNNConvert UIBarStyle:options.bottomTabs.barStyle.get]];
33
+ }
30
34
  [self applyBackgroundColor:[withDefault.bottomTabs.backgroundColor withDefault:nil]
31
35
  translucent:[withDefault.bottomTabs.translucent withDefault:NO]];
32
- [bottomTabs setTabBarHideShadow:[withDefault.bottomTabs.hideShadow withDefault:NO]];
33
- [bottomTabs setTabBarStyle:[RNNConvert UIBarStyle:[withDefault.bottomTabs.barStyle
34
- withDefault:@"default"]]];
35
36
  [self applyTabBarBorder:withDefault.bottomTabs];
36
37
  [self applyTabBarShadow:withDefault.bottomTabs.shadow];
37
38
  }
@@ -65,7 +66,7 @@
65
66
  }
66
67
 
67
68
  if (mergeOptions.bottomTabs.translucent.hasValue) {
68
- [bottomTabs setTabBarTranslucent:mergeOptions.bottomTabs.translucent.get];
69
+ [self setTabBarTranslucent:mergeOptions.bottomTabs.translucent.get];
69
70
  }
70
71
 
71
72
  if (mergeOptions.bottomTabs.hideShadow.hasValue) {
package/ios/RCTHelpers.mm CHANGED
@@ -1,6 +1,8 @@
1
1
  #import "RCTHelpers.h"
2
2
  #import <React/RCTFont.h>
3
+ #if __has_include(<React/RCTScrollView.h>)
3
4
  #import <React/RCTScrollView.h>
5
+ #endif
4
6
  #import <React/RCTView.h>
5
7
 
6
8
  @implementation RCTHelpers
@@ -201,7 +203,7 @@
201
203
  UIView *yelloboxParentView = view;
202
204
  while (view.superview != nil) {
203
205
  yelloboxParentView = yelloboxParentView.superview;
204
- if ([yelloboxParentView isKindOfClass:[RCTScrollView class]]) {
206
+ if ([yelloboxParentView isKindOfClass:NSClassFromString(@"RCTScrollView")]) {
205
207
  yelloboxParentView = yelloboxParentView.superview;
206
208
  break;
207
209
  }
@@ -5,11 +5,17 @@
5
5
 
6
6
  #import "RCTAppSetupUtils.h"
7
7
  #import <React/CoreModulesPlugins.h>
8
+ #if __has_include(<React/RCTCxxBridgeDelegate.h>)
8
9
  #import <React/RCTCxxBridgeDelegate.h>
10
+ #endif
9
11
  #import <React/RCTLegacyViewManagerInteropComponentView.h>
10
12
  #import <React/RCTSurfacePresenter.h>
13
+ #if __has_include(<React/RCTSurfacePresenterStub.h>)
11
14
  #import <React/RCTSurfacePresenterStub.h>
15
+ #endif
16
+ #if __has_include(<React/RCTSurfacePresenterBridgeAdapter.h>)
12
17
  #import <React/RCTSurfacePresenterBridgeAdapter.h>
18
+ #endif
13
19
  #import <ReactCommon/RCTTurboModuleManager.h>
14
20
 
15
21
  #if __has_include(<react/config/ReactNativeConfig.h>)
@@ -19,9 +25,13 @@
19
25
  #import <react/renderer/runtimescheduler/RuntimeScheduler.h>
20
26
  #import <react/renderer/runtimescheduler/RuntimeSchedulerCallInvoker.h>
21
27
  #import <React/RCTSurfacePresenter.h>
28
+ #if __has_include(<React/RCTBridge+Private.h>)
22
29
  #import <React/RCTBridge+Private.h>
30
+ #endif
23
31
  #import <React/RCTImageLoader.h>
32
+ #if __has_include(<React/RCTBridgeProxy.h>)
24
33
  #import <React/RCTBridgeProxy.h>
34
+ #endif
25
35
  #import <React/RCTSurfacePresenter.h>
26
36
  #import <react/utils/ManagedObjectWrapper.h>
27
37
 
@@ -48,14 +48,27 @@
48
48
  eventEmitter:eventEmitter
49
49
  childViewControllers:childViewControllers];
50
50
 
51
- if (@available(iOS 13.0, *)) {
52
- self.tabBar.standardAppearance = [UITabBarAppearance new];
53
- }
51
+ if (@available(iOS 26.0, *)) {
52
+ UITabBarAppearance *appearance = [UITabBarAppearance new];
53
+ [appearance configureWithTransparentBackground];
54
+ appearance.backgroundEffect = nil;
55
+ appearance.backgroundColor = UIColor.clearColor;
56
+ self.tabBar.standardAppearance = appearance;
57
+ self.tabBar.scrollEdgeAppearance = [appearance copy];
58
+ self.tabBar.barTintColor = UIColor.clearColor;
59
+ } else if (@available(iOS 13.0, *)) {
60
+ UITabBarAppearance *appearance = [UITabBarAppearance new];
61
+ [appearance configureWithOpaqueBackground];
62
+ appearance.backgroundEffect = nil;
63
+ appearance.backgroundColor = UIColor.systemBackgroundColor;
64
+ self.tabBar.standardAppearance = appearance;
54
65
  #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 150000
55
- if (@available(iOS 15.0, *)) {
56
- self.tabBar.scrollEdgeAppearance = [UITabBarAppearance new];
57
- }
66
+ if (@available(iOS 15.0, *)) {
67
+ self.tabBar.scrollEdgeAppearance = [appearance copy];
68
+ }
58
69
  #endif
70
+ self.tabBar.translucent = NO;
71
+ }
59
72
 
60
73
  [self createTabBarItems:childViewControllers];
61
74
 
@@ -72,7 +72,11 @@
72
72
  }
73
73
 
74
74
  - (BOOL)shouldDrawBehind {
75
- return [self.drawBehind withDefault:NO] || [self.translucent withDefault:NO] ||
75
+ BOOL defaultDrawBehind = NO;
76
+ if (@available(iOS 26.0, *)) {
77
+ defaultDrawBehind = YES;
78
+ }
79
+ return [self.drawBehind withDefault:defaultDrawBehind] || [self.translucent withDefault:NO] ||
76
80
  ![self.visible withDefault:YES];
77
81
  }
78
82
 
@@ -107,8 +107,10 @@
107
107
 
108
108
  - (void)onJavaScriptLoaded {
109
109
  [_commandsHandler setReadyToReceiveCommands:true];
110
+ #ifndef RCT_REMOVE_LEGACY_ARCH
110
111
  [_modalHostViewHandler
111
112
  connectModalHostViewManager:[self.bridge moduleForClass:RCTModalHostViewManager.class]];
113
+ #endif
112
114
  [[_bridge moduleForClass:[RNNBridgeEventEmitter class]] sendOnAppLaunched];
113
115
  }
114
116
 
@@ -91,6 +91,7 @@
91
91
  }];
92
92
  self.reactView.backgroundColor = UIColor.clearColor;
93
93
  self.reactView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
94
+ self.reactView.clipsToBounds = YES;
94
95
  [self.reactView setFrame:self.view.frame];
95
96
  [self.view addSubview:self.reactView];
96
97
  [self updateReactViewFrame];
@@ -118,14 +119,15 @@
118
119
  if (self.isViewLoaded && self.reactView) {
119
120
  CGFloat bottomInset = self.shouldDrawBehindBottomTabs ? 0 : self.view.safeAreaInsets.bottom;
120
121
  CGFloat topInset = self.shouldDrawBehindTopBar ? 0 : self.view.safeAreaInsets.top;
122
+
121
123
  [self.reactView setFrame:CGRectMake(0, topInset, self.view.frame.size.width,
122
124
  self.view.frame.size.height - topInset - bottomInset)];
123
125
  }
124
126
  }
125
127
 
126
128
  - (BOOL)shouldDrawBehindBottomTabs {
127
- return (!self.tabBarController.tabBar || self.tabBarController.tabBar.isHidden ||
128
- _drawBehindBottomTabs);
129
+ return !self.tabBarController.tabBar || self.tabBarController.tabBar.isHidden ||
130
+ _drawBehindBottomTabs;
129
131
  }
130
132
 
131
133
  - (BOOL)shouldDrawBehindTopBar {
@@ -1,11 +1,16 @@
1
1
  #import "RNNModalManager.h"
2
2
  #import <Foundation/Foundation.h>
3
+
4
+ #ifndef RCT_REMOVE_LEGACY_ARCH
3
5
  #import <React/RCTModalHostViewManager.h>
6
+ #endif
4
7
 
5
8
  @interface RNNModalHostViewManagerHandler : NSObject
6
9
 
7
10
  - (instancetype)initWithModalManager:(RNNModalManager *)modalManager;
8
11
 
12
+ #ifndef RCT_REMOVE_LEGACY_ARCH
9
13
  - (void)connectModalHostViewManager:(RCTModalHostViewManager *)modalHostViewManager;
14
+ #endif
10
15
 
11
16
  @end
@@ -10,6 +10,7 @@
10
10
  return self;
11
11
  }
12
12
 
13
+ #ifndef RCT_REMOVE_LEGACY_ARCH
13
14
  - (void)connectModalHostViewManager:(RCTModalHostViewManager *)modalHostViewManager {
14
15
  modalHostViewManager.presentationBlock =
15
16
  ^(UIViewController *reactViewController, UIViewController *viewController, BOOL animated,
@@ -36,5 +37,6 @@
36
37
  }];
37
38
  };
38
39
  }
40
+ #endif
39
41
 
40
42
  @end
@@ -1,6 +1,5 @@
1
1
  #import "RNNOverlayWindow.h"
2
2
  #import "RNNReactView.h"
3
- #import <React/RCTModalHostView.h>
4
3
 
5
4
  @implementation RNNOverlayWindow
6
5
 
@@ -9,7 +8,7 @@
9
8
 
10
9
  if ([hitTestResult isKindOfClass:[UIWindow class]] ||
11
10
  [hitTestResult.subviews.firstObject isKindOfClass:RNNReactView.class] ||
12
- [hitTestResult isKindOfClass:[RCTModalHostView class]] ||
11
+ [hitTestResult isKindOfClass:NSClassFromString(@"RCTModalHostView")] ||
13
12
  [hitTestResult isKindOfClass:NSClassFromString(@"RCTRootComponentView")]) {
14
13
  return nil;
15
14
  }
@@ -22,8 +22,10 @@
22
22
 
23
23
  [self setTitleAttributes:options.title];
24
24
  [self setLargeTitleAttributes:options.largeTitle];
25
- if (options.scrollEdgeAppearance.title && [options.scrollEdgeAppearance.title hasValue]) {
25
+ if (options.scrollEdgeAppearance.title.hasValue) {
26
26
  [self setScrollEdgeTitleAttributes:options.scrollEdgeAppearance.title];
27
+ } else {
28
+ [self setScrollEdgeTitleAttributes:options.title];
27
29
  }
28
30
 
29
31
  [self setBorderColor:[options.borderColor withDefault:nil]];
@@ -53,6 +55,12 @@
53
55
  if (options.scrollEdgeAppearance.noBorder.hasValue) {
54
56
  [self showScrollEdgeBorder:!options.scrollEdgeAppearance.noBorder.get];
55
57
  }
58
+
59
+ if (options.scrollEdgeAppearance.title.hasValue) {
60
+ [self setScrollEdgeTitleAttributes:defaultOptions.scrollEdgeAppearance.title];
61
+ } else if (options.title.hasValue && !defaultOptions.scrollEdgeAppearance.title.hasValue) {
62
+ [self setScrollEdgeTitleAttributes:defaultOptions.title];
63
+ }
56
64
  }
57
65
 
58
66
  - (void)setTranslucent:(BOOL)translucent {
@@ -160,7 +168,6 @@
160
168
  }
161
169
 
162
170
  self.getAppearance.titleTextAttributes = titleTextAttributes;
163
- self.getScrollEdgeAppearance.titleTextAttributes = titleTextAttributes;
164
171
  }
165
172
 
166
173
  - (void)setScrollEdgeTitleAttributes:(RNNTitleOptions *)titleOptions {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-navigation",
3
- "version": "8.7.6-snapshot.2279",
3
+ "version": "8.7.6-snapshot.2352",
4
4
  "description": "React Native Navigation - truly native navigation for iOS and Android",
5
5
  "license": "MIT",
6
6
  "nativePackage": true,
@@ -94,15 +94,16 @@
94
94
  "@babel/preset-env": "^7.25.3",
95
95
  "@babel/runtime": "^7.25.0",
96
96
  "@babel/types": "7.25.0",
97
+ "@d11/react-native-fast-image": "^8.13.0",
97
98
  "@react-native-community/cli": "20.0.0",
98
99
  "@react-native-community/cli-platform-android": "20.0.0",
99
100
  "@react-native-community/cli-platform-ios": "20.0.0",
100
101
  "@react-native-community/datetimepicker": "^8.2.0",
101
102
  "@react-native-community/netinfo": "^11.4.1",
102
- "@react-native/babel-preset": "0.83.0",
103
- "@react-native/eslint-config": "0.83.0",
104
- "@react-native/metro-config": "0.83.0",
105
- "@react-native/typescript-config": "0.83.0",
103
+ "@react-native/babel-preset": "0.84.0",
104
+ "@react-native/eslint-config": "0.84.0",
105
+ "@react-native/metro-config": "0.84.0",
106
+ "@react-native/typescript-config": "0.84.0",
106
107
  "@testing-library/jest-native": "^5.4.2",
107
108
  "@testing-library/react-native": "^13.0.1",
108
109
  "@types/hoist-non-react-statics": "^3.3.6",
@@ -130,15 +131,14 @@
130
131
  "pixelmatch": "^5.2.1",
131
132
  "pngjs": "^6.0.0",
132
133
  "prettier": "2.8.8",
133
- "react": "19.2.0",
134
- "react-native": "0.83.0",
134
+ "react": "19.2.3",
135
+ "react-native": "0.84.0",
135
136
  "react-native-builder-bob": "^0.40.13",
136
- "react-native-fast-image": "^8.6.3",
137
137
  "react-native-gesture-handler": "^2.29.1",
138
- "react-native-reanimated": "4.1.5",
139
- "react-native-worklets": "0.5.0",
138
+ "react-native-reanimated": "4.2.2",
139
+ "react-native-worklets": "0.7.4",
140
140
  "react-redux": "9.1.2",
141
- "react-test-renderer": "19.2.0",
141
+ "react-test-renderer": "19.2.3",
142
142
  "redux": "^5.0.1",
143
143
  "remx": "3.x.x",
144
144
  "semver": "5.x.x",