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 5192358f661..b164cc3d6ac 100644 --- a/packages/react-native/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm +++ b/packages/react-native/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm @@ -472,6 +472,7 @@ static void RCTSendScrollEventForNativeAnimations_DEPRECATED(UIScrollView *scrol - (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView { _isUserTriggeredScrolling = NO; + static_cast(*_eventEmitter).onScrollToTop([self _scrollViewMetrics]); [self _updateStateWithContentOffset]; } diff --git a/packages/react-native/ReactCommon/react/renderer/components/scrollview/ScrollViewEventEmitter.cpp b/packages/react-native/ReactCommon/react/renderer/components/scrollview/ScrollViewEventEmitter.cpp index 6fc866fab60..9ea8c939900 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/scrollview/ScrollViewEventEmitter.cpp +++ b/packages/react-native/ReactCommon/react/renderer/components/scrollview/ScrollViewEventEmitter.cpp @@ -64,6 +64,14 @@ void ScrollViewEventEmitter::onScroll( }); } +void ScrollViewEventEmitter::onScrollToTop( + const ScrollViewMetrics& scrollViewMetrics) const { + dispatchUniqueEvent( + "scrollToTop", [scrollViewMetrics](jsi::Runtime& runtime) { + return scrollViewMetricsPayload(runtime, scrollViewMetrics); + }); +} + void ScrollViewEventEmitter::onScrollBeginDrag( const ScrollViewMetrics& scrollViewMetrics) const { dispatchScrollViewEvent("scrollBeginDrag", scrollViewMetrics); diff --git a/packages/react-native/ReactCommon/react/renderer/components/scrollview/ScrollViewEventEmitter.h b/packages/react-native/ReactCommon/react/renderer/components/scrollview/ScrollViewEventEmitter.h index 50bff3465fd..8a849db8a50 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/scrollview/ScrollViewEventEmitter.h +++ b/packages/react-native/ReactCommon/react/renderer/components/scrollview/ScrollViewEventEmitter.h @@ -33,6 +33,7 @@ class ScrollViewEventEmitter : public ViewEventEmitter { void onScrollEndDrag(const ScrollViewMetrics& scrollViewMetrics) const; void onMomentumScrollBegin(const ScrollViewMetrics& scrollViewMetrics) const; void onMomentumScrollEnd(const ScrollViewMetrics& scrollViewMetrics) const; + void onScrollToTop(const ScrollViewMetrics& scrollViewMetrics) const; private: void dispatchScrollViewEvent(