From efcfe5dcd6626efbbac3f92e4d842e843aea7d77 Mon Sep 17 00:00:00 2001 From: zhongwuzw Date: Wed, 4 Dec 2024 07:49:12 -0800 Subject: [PATCH] Fabric: Fixes insets not adjust when keyboard disappear (#47924) Summary: Fixes https://github.com/facebook/react-native/issues/47731 . ## Changelog: [IOS] [FIXED] - Fabric: Fixes insets not adjust when keyboard disappear Pull Request resolved: https://github.com/facebook/react-native/pull/47924 Test Plan: Demo in https://github.com/facebook/react-native/issues/47731 Reviewed By: blakef Differential Revision: D66651865 Pulled By: cipolleschi fbshipit-source-id: a75afbd1a7651f0c77022d913f910821c482fcf7 --- .../ScrollView/RCTScrollViewComponentView.mm | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/packages/react-native/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm b/packages/react-native/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm index 95f38d95fac..97b47aa8600 100644 --- a/packages/react-native/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm +++ b/packages/react-native/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm @@ -189,10 +189,11 @@ RCTSendScrollEventForNativeAnimations_DEPRECATED(UIScrollView *scrollView, NSInt UIEdgeInsets newEdgeInsets = _scrollView.contentInset; CGFloat inset = MAX(scrollViewLowerY - keyboardEndFrame.origin.y, 0); + const auto &props = static_cast(*_props); if (isInverted) { - newEdgeInsets.top = MAX(inset, _scrollView.contentInset.top); + newEdgeInsets.top = MAX(inset, props.contentInset.top); } else { - newEdgeInsets.bottom = MAX(inset, _scrollView.contentInset.bottom); + newEdgeInsets.bottom = MAX(inset, props.contentInset.bottom); } CGPoint newContentOffset = _scrollView.contentOffset; @@ -210,12 +211,6 @@ RCTSendScrollEventForNativeAnimations_DEPRECATED(UIScrollView *scrollView, NSInt contentDiff = keyboardEndFrame.origin.y - keyboardBeginFrame.origin.y; } } else { - CGRect viewIntersection = CGRectIntersection(self.firstResponderFocus, keyboardEndFrame); - - if (CGRectIsNull(viewIntersection)) { - return; - } - // Inner text field focused CGFloat focusEnd = CGRectGetMaxY(self.firstResponderFocus); if (focusEnd > keyboardEndFrame.origin.y) { @@ -247,7 +242,7 @@ RCTSendScrollEventForNativeAnimations_DEPRECATED(UIScrollView *scrollView, NSInt animations:^{ self->_scrollView.contentInset = newEdgeInsets; self->_scrollView.verticalScrollIndicatorInsets = newEdgeInsets; - [self scrollToOffset:newContentOffset animated:NO]; + [self scrollTo:newContentOffset.x y:newContentOffset.y animated:NO]; } completion:nil]; }