From bd64699f0abf405be333d70039734d2f1a5d8e3f Mon Sep 17 00:00:00 2001 From: Samuel Susla Date: Fri, 21 Apr 2023 10:43:17 -0700 Subject: [PATCH] Reset internal state of RCTScrollViewComponentView in scrollViewDidEndDragging Summary: changelog: [internal] `_isUserTriggeredScrolling` must be NO when user interaction stops. This was not the case when user scrolled -> lifted finger but the scroll did not decelerate into position. The case with deceleration is handled in method `scrollViewDidEndDecelerating`. Reviewed By: javache Differential Revision: D45147325 fbshipit-source-id: 1b55dc708c4c7d6cffa917a822eb2b569b22dbb2 --- .../ScrollView/RCTScrollViewComponentView.mm | 7 +++++++ 1 file changed, 7 insertions(+) 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 e5755844e7e..d8ee6cb3d8b 100644 --- a/packages/react-native/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm +++ b/packages/react-native/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm @@ -492,7 +492,14 @@ static void RCTSendScrollEventForNativeAnimations_DEPRECATED(UIScrollView *scrol } std::static_pointer_cast(_eventEmitter)->onScrollEndDrag([self _scrollViewMetrics]); + [self _updateStateWithContentOffset]; + + if (!decelerate) { + // ScrollView will not decelerate and `scrollViewDidEndDecelerating` will not be called. + // `_isUserTriggeredScrolling` must be set to NO here. + _isUserTriggeredScrolling = NO; + } } - (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView