Add `onScrollToTop` to ScrollView for iOS (#21204)
Summary: This PR exposes the `onScrollToTop` event on iOS using the same event-forwarding infrastructure as other ScrollView events. (As such, its `nativeEvent` object reflects the same fields as other ScrollView events.) Motivation: ---------- If your app is only interested in knowing the position of a ScrollView after a scroll has completed, it can use `onScrollEndDrag` and `onMomentumScrollEnd` to inspect the `contentOffset` after a drag-initiated scroll has finished. (This is much less expensive than observing the `onScroll` event if you only want to know the end position.) However, neither of these `End` events fire if the ScrollView is scrolled to the top by tapping the status bar. By exposing `onScrollToTop`, it is now possible for an app to cheaply know when such a scroll has completed. Pull Request resolved: https://github.com/facebook/react-native/pull/21204 Differential Revision: D9943618 Pulled By: hramos fbshipit-source-id: ac5ee42b7f12d94655ffda617f8f811138da7f6f
This commit is contained in:
parent
58fe324163
commit
9733b92f3d
|
@ -217,6 +217,11 @@ type IOSProps = $ReadOnly<{|
|
||||||
* @platform ios
|
* @platform ios
|
||||||
*/
|
*/
|
||||||
scrollsToTop?: ?boolean,
|
scrollsToTop?: ?boolean,
|
||||||
|
/**
|
||||||
|
* Fires when the scroll view scrolls to top after the status bar has been tapped
|
||||||
|
* @platform ios
|
||||||
|
*/
|
||||||
|
onScrollToTop?: ?Function,
|
||||||
/**
|
/**
|
||||||
* When true, shows a horizontal scroll indicator.
|
* When true, shows a horizontal scroll indicator.
|
||||||
* The default value is true.
|
* The default value is true.
|
||||||
|
|
|
@ -55,6 +55,7 @@
|
||||||
// need to be coalesced before sending, for performance reasons.
|
// need to be coalesced before sending, for performance reasons.
|
||||||
@property (nonatomic, copy) RCTDirectEventBlock onScrollBeginDrag;
|
@property (nonatomic, copy) RCTDirectEventBlock onScrollBeginDrag;
|
||||||
@property (nonatomic, copy) RCTDirectEventBlock onScroll;
|
@property (nonatomic, copy) RCTDirectEventBlock onScroll;
|
||||||
|
@property (nonatomic, copy) RCTDirectEventBlock onScrollToTop;
|
||||||
@property (nonatomic, copy) RCTDirectEventBlock onScrollEndDrag;
|
@property (nonatomic, copy) RCTDirectEventBlock onScrollEndDrag;
|
||||||
@property (nonatomic, copy) RCTDirectEventBlock onMomentumScrollBegin;
|
@property (nonatomic, copy) RCTDirectEventBlock onMomentumScrollBegin;
|
||||||
@property (nonatomic, copy) RCTDirectEventBlock onMomentumScrollEnd;
|
@property (nonatomic, copy) RCTDirectEventBlock onMomentumScrollEnd;
|
||||||
|
|
|
@ -648,6 +648,7 @@ for (NSObject<UIScrollViewDelegate> *scrollViewListener in _scrollListeners) { \
|
||||||
|
|
||||||
RCT_SCROLL_EVENT_HANDLER(scrollViewWillBeginDecelerating, onMomentumScrollBegin)
|
RCT_SCROLL_EVENT_HANDLER(scrollViewWillBeginDecelerating, onMomentumScrollBegin)
|
||||||
RCT_SCROLL_EVENT_HANDLER(scrollViewDidZoom, onScroll)
|
RCT_SCROLL_EVENT_HANDLER(scrollViewDidZoom, onScroll)
|
||||||
|
RCT_SCROLL_EVENT_HANDLER(scrollViewDidScrollToTop, onScrollToTop)
|
||||||
|
|
||||||
- (void)addScrollListener:(NSObject<UIScrollViewDelegate> *)scrollListener
|
- (void)addScrollListener:(NSObject<UIScrollViewDelegate> *)scrollListener
|
||||||
{
|
{
|
||||||
|
|
|
@ -88,6 +88,7 @@ RCT_EXPORT_VIEW_PROPERTY(snapToAlignment, NSString)
|
||||||
RCT_REMAP_VIEW_PROPERTY(contentOffset, scrollView.contentOffset, CGPoint)
|
RCT_REMAP_VIEW_PROPERTY(contentOffset, scrollView.contentOffset, CGPoint)
|
||||||
RCT_EXPORT_VIEW_PROPERTY(onScrollBeginDrag, RCTDirectEventBlock)
|
RCT_EXPORT_VIEW_PROPERTY(onScrollBeginDrag, RCTDirectEventBlock)
|
||||||
RCT_EXPORT_VIEW_PROPERTY(onScroll, RCTDirectEventBlock)
|
RCT_EXPORT_VIEW_PROPERTY(onScroll, RCTDirectEventBlock)
|
||||||
|
RCT_EXPORT_VIEW_PROPERTY(onScrollToTop, RCTDirectEventBlock)
|
||||||
RCT_EXPORT_VIEW_PROPERTY(onScrollEndDrag, RCTDirectEventBlock)
|
RCT_EXPORT_VIEW_PROPERTY(onScrollEndDrag, RCTDirectEventBlock)
|
||||||
RCT_EXPORT_VIEW_PROPERTY(onMomentumScrollBegin, RCTDirectEventBlock)
|
RCT_EXPORT_VIEW_PROPERTY(onMomentumScrollBegin, RCTDirectEventBlock)
|
||||||
RCT_EXPORT_VIEW_PROPERTY(onMomentumScrollEnd, RCTDirectEventBlock)
|
RCT_EXPORT_VIEW_PROPERTY(onMomentumScrollEnd, RCTDirectEventBlock)
|
||||||
|
|
Loading…
Reference in New Issue