diff --git a/lib/ios/reactnativeuilib/keyboardtrackingview/KeyboardTrackingViewTempManager.m b/lib/ios/reactnativeuilib/keyboardtrackingview/KeyboardTrackingViewTempManager.m index 6d81773a4d..f786e947c1 100644 --- a/lib/ios/reactnativeuilib/keyboardtrackingview/KeyboardTrackingViewTempManager.m +++ b/lib/ios/reactnativeuilib/keyboardtrackingview/KeyboardTrackingViewTempManager.m @@ -11,11 +11,12 @@ #import "UIResponder+FirstResponderTemp.h" #import -#import + #import #import #import #import +#import #import @@ -70,7 +71,7 @@ -(instancetype)init if (self) { - [self addObserver:self forKeyPath:@"bounds" options:NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew context:NULL]; + [self addObserver:self forKeyPath:@"frame" options:NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew context:NULL]; _inputViewsMap = [NSMapTable weakToWeakObjectsMapTable]; _deferedInitializeAccessoryViewsCount = 0; @@ -93,20 +94,21 @@ -(instancetype)init return self; } --(RCTRootView*)getRootView +-(UIView*)getRootView { UIView *view = self; while (view.superview != nil) { view = view.superview; - if ([view isKindOfClass:[RCTRootView class]]) + if ([view isKindOfClass:[RCTSurfaceHostingView class]]) { break; + } } - if ([view isKindOfClass:[RCTRootView class]]) - { - return (RCTRootView*)view; + if ([view isKindOfClass:[RCTSurfaceHostingView class]]) { + return view; } + return nil; } @@ -169,10 +171,20 @@ -(void)layoutSubviews [self updateBottomViewFrame]; } +- (UIScrollView*)extractUIScrollView:(UIView*)view +{ + for (UIView* subview in view.subviews) { + if ([subview isKindOfClass:[UIScrollView class]]) { + return (UIScrollView*)subview; + } + } + + return nil; +} + - (void)initializeAccessoryViewsAndHandleInsets { NSArray* allSubviews = [self getBreadthFirstSubviewsForView:[self getRootView]]; - NSMutableArray* rctScrollViewsArray = [NSMutableArray array]; for (UIView* subview in allSubviews) { @@ -180,26 +192,29 @@ - (void)initializeAccessoryViewsAndHandleInsets { if(_scrollViewToManage == nil) { - if(_requiresSameParentToManageScrollView && [subview isKindOfClass:[RCTScrollView class]] && subview.superview == self.superview) - { - _scrollViewToManage = ((RCTScrollView*)subview).scrollView; - } - else if(!_requiresSameParentToManageScrollView && [subview isKindOfClass:[UIScrollView class]]) - { - _scrollViewToManage = (UIScrollView*)subview; + if ([NSStringFromClass([subview class]) isEqualToString:@"RCTScrollViewComponentView"]) { + UIScrollView *scrollView = [self extractUIScrollView:subview]; + + if ([scrollView isKindOfClass:[UIScrollView class]]) + { + if(_requiresSameParentToManageScrollView && subview.superview == self.superview) + { + _scrollViewToManage = scrollView; + } + else if(!_requiresSameParentToManageScrollView) + { + _scrollViewToManage = scrollView; + } + + if(_scrollViewToManage != nil) + { + _scrollIsInverted = CGAffineTransformEqualToTransform(subview.superview.transform, CGAffineTransformMakeScale(1, -1)); + } + } } - - if(_scrollViewToManage != nil) - { - _scrollIsInverted = CGAffineTransformEqualToTransform(_scrollViewToManage.superview.transform, CGAffineTransformMakeScale(1, -1)); - } - } - - if([subview isKindOfClass:[RCTScrollView class]]) - { - [rctScrollViewsArray addObject:(RCTScrollView*)subview]; } } + if ([subview isKindOfClass:NSClassFromString(@"RCTTextField")]) { @@ -247,13 +262,11 @@ - (void)initializeAccessoryViewsAndHandleInsets } } - for (RCTScrollView *scrollView in rctScrollViewsArray) + if(_scrollViewToManage != nil) { - if(scrollView.scrollView == _scrollViewToManage) + if(_scrollViewToManage.delegate == nil) { - [scrollView removeScrollListener:self]; - [scrollView addScrollListener:self]; - break; + _scrollViewToManage.delegate = self; } } @@ -338,12 +351,12 @@ -(void)didMoveToWindow -(void)dealloc { - [self removeObserver:self forKeyPath:@"bounds"]; + [self removeObserver:self forKeyPath:@"frame"]; } - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { - _ObservingInputAccessoryViewTemp.height = self.bounds.size.height; + _ObservingInputAccessoryViewTemp.height = self.frame.size.height; } - (void)ObservingInputAccessoryViewTempKeyboardWillDisappear:(ObservingInputAccessoryViewTemp *)ObservingInputAccessoryViewTemp diff --git a/package.json b/package.json index e66f7fd1f8..ef0bd562f0 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "react-native-redash": "^12.0.3", "semver": "^5.5.0", "tinycolor2": "^1.4.2", - "uilib-native": "5.0.0-snapshot.7216", + "uilib-native": "5.0.0-snapshot.7240", "url-parse": "^1.2.0", "wix-react-native-text-size": "1.0.9" }, diff --git a/yarn.lock b/yarn.lock index 0ce80a7f97..354848bca3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10938,7 +10938,7 @@ __metadata: shell-utils: ^1.0.10 tinycolor2: ^1.4.2 typescript: 5.0.4 - uilib-native: 5.0.0-snapshot.7216 + uilib-native: 5.0.0-snapshot.7240 url-parse: ^1.2.0 wix-react-native-text-size: 1.0.9 peerDependencies: @@ -12570,16 +12570,16 @@ __metadata: languageName: node linkType: hard -"uilib-native@npm:5.0.0-snapshot.7216": - version: 5.0.0-snapshot.7216 - resolution: "uilib-native@npm:5.0.0-snapshot.7216" +"uilib-native@npm:5.0.0-snapshot.7240": + version: 5.0.0-snapshot.7240 + resolution: "uilib-native@npm:5.0.0-snapshot.7240" dependencies: lodash: ^4.17.21 prop-types: ^15.5.10 peerDependencies: react: ">=17.0.1" react-native: ">=0.64.1" - checksum: 3ca207bae3865fc4275393135f5cd4a46c52678100d4308fe1008d0167d8d5ae8bd1cab558b364d7ad60e5c96cb38497cd10b0109e15376c623ef9849cfb3a32 + checksum: e18a273800b231479aea3fac4a43c7f2c4a6f74c995f44e7b9ab5642b666d94060ff09a2c0f76cf6e871cbd8fc57baaee92a4879c28e20be3358fbb4fd02dc0f languageName: node linkType: hard