diff --git a/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.java b/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.java index 0e3fa9fb..e7faea2f 100644 --- a/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.java +++ b/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.java @@ -207,6 +207,12 @@ public class ScreenStackHeaderConfig extends ViewGroup { } } + private void maybeUpdate() { + if (getParent() != null) { + onUpdate(); + } + } + public ScreenStackHeaderSubview getConfigSubview(int index) { return mConfigSubviews[index]; } @@ -220,6 +226,7 @@ public class ScreenStackHeaderConfig extends ViewGroup { mSubviewsCount--; } mConfigSubviews[index] = null; + maybeUpdate(); } public void addConfigSubview(ScreenStackHeaderSubview child, int index) { @@ -227,6 +234,7 @@ public class ScreenStackHeaderConfig extends ViewGroup { mSubviewsCount++; } mConfigSubviews[index] = child; + maybeUpdate(); } private TextView getTitleTextView() { diff --git a/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.java b/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.java index 88a968d7..f186e22c 100644 --- a/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.java +++ b/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.java @@ -52,6 +52,12 @@ public class ScreenStackHeaderConfigViewManager extends ViewGroupManager #import +#import "RNSScreen.h" + @interface RNSScreenStackHeaderConfig : UIView +@property (nonatomic, weak) RNSScreenView *screenView; + @property (nonatomic, retain) NSString *title; @property (nonatomic, retain) NSString *titleFontFamily; @property (nonatomic, retain) NSNumber *titleFontSize; diff --git a/ios/RNSScreenStackHeaderConfig.m b/ios/RNSScreenStackHeaderConfig.m index aaeeca0d..b8ddf7fb 100644 --- a/ios/RNSScreenStackHeaderConfig.m +++ b/ios/RNSScreenStackHeaderConfig.m @@ -66,13 +66,36 @@ return _reactSubviews; } -- (UIViewController*)screen +- (UIView *)reactSuperview { - UIView *superview = self.superview; - if ([superview isKindOfClass:[RNSScreenView class]]) { - return ((RNSScreenView *)superview).controller; + return _screenView; +} + +- (void)removeFromSuperview +{ + [super removeFromSuperview]; + _screenView = nil; +} + +- (void)updateViewControllerIfNeeded +{ + UIViewController *vc = _screenView.controller; + UINavigationController *nav = (UINavigationController*) vc.parentViewController; + if (vc != nil && nav.visibleViewController == vc) { + [RNSScreenStackHeaderConfig updateViewController:self.screenView.controller withConfig:self]; } - return nil; +} + +- (void)didSetProps:(NSArray *)changedProps +{ + [super didSetProps:changedProps]; + [self updateViewControllerIfNeeded]; +} + +- (void)didUpdateReactSubviews +{ + [super didUpdateReactSubviews]; + [self updateViewControllerIfNeeded]; } + (void)setAnimatedConfig:(UIViewController *)vc withConfig:(RNSScreenStackHeaderConfig *)config @@ -142,6 +165,11 @@ } + (void)willShowViewController:(UIViewController *)vc withConfig:(RNSScreenStackHeaderConfig *)config +{ + [self updateViewController:vc withConfig:config]; +} + ++ (void)updateViewController:(UIViewController *)vc withConfig:(RNSScreenStackHeaderConfig *)config { UINavigationItem *navitem = vc.navigationItem; UINavigationController *navctr = (UINavigationController *)vc.parentViewController;