diff --git a/Libraries/Components/ScrollView/ScrollView.js b/Libraries/Components/ScrollView/ScrollView.js index a2be38422..cec27cc67 100644 --- a/Libraries/Components/ScrollView/ScrollView.js +++ b/Libraries/Components/ScrollView/ScrollView.js @@ -76,49 +76,263 @@ type TouchableProps = $ReadOnly<{| |}>; type IOSProps = $ReadOnly<{| + /** + * Controls whether iOS should automatically adjust the content inset + * for scroll views that are placed behind a navigation bar or + * tab bar/ toolbar. The default value is true. + * @platform ios + */ automaticallyAdjustContentInsets?: ?boolean, + /** + * The amount by which the scroll view content is inset from the edges + * of the scroll view. Defaults to `{top: 0, left: 0, bottom: 0, right: 0}`. + * @platform ios + */ contentInset?: ?EdgeInsetsProp, + /** + * Used to manually set the starting scroll offset. + * The default value is `{x: 0, y: 0}`. + * @platform ios + */ contentOffset?: ?PointProp, + /** + * When true, the scroll view bounces when it reaches the end of the + * content if the content is larger then the scroll view along the axis of + * the scroll direction. When false, it disables all bouncing even if + * the `alwaysBounce*` props are true. The default value is true. + * @platform ios + */ bounces?: ?boolean, + /** + * When true, gestures can drive zoom past min/max and the zoom will animate + * to the min/max value at gesture end, otherwise the zoom will not exceed + * the limits. + * @platform ios + */ bouncesZoom?: ?boolean, + /** + * When true, the scroll view bounces horizontally when it reaches the end + * even if the content is smaller than the scroll view itself. The default + * value is true when `horizontal={true}` and false otherwise. + * @platform ios + */ alwaysBounceHorizontal?: ?boolean, + /** + * When true, the scroll view bounces vertically when it reaches the end + * even if the content is smaller than the scroll view itself. The default + * value is false when `horizontal={true}` and true otherwise. + * @platform ios + */ alwaysBounceVertical?: ?boolean, + /** + * When true, the scroll view automatically centers the content when the + * content is smaller than the scroll view bounds; when the content is + * larger than the scroll view, this property has no effect. The default + * value is false. + * @platform ios + */ centerContent?: ?boolean, + /** + * A floating-point number that determines how quickly the scroll view + * decelerates after the user lifts their finger. You may also use string + * shortcuts `"normal"` and `"fast"` which match the underlying iOS settings + * for `UIScrollViewDecelerationRateNormal` and + * `UIScrollViewDecelerationRateFast` respectively. + * + * - `'normal'`: 0.998 (the default) + * - `'fast'`: 0.99 + * + * @platform ios + */ decelerationRate?: ?('fast' | 'normal' | number), + /** + * The style of the scroll indicators. + * + * - `'default'` (the default), same as `black`. + * - `'black'`, scroll indicator is black. This style is good against a light background. + * - `'white'`, scroll indicator is white. This style is good against a dark background. + * + * @platform ios + */ indicatorStyle?: ?('default' | 'black' | 'white'), + /** + * When true, the ScrollView will try to lock to only vertical or horizontal + * scrolling while dragging. The default value is false. + * @platform ios + */ directionalLockEnabled?: ?boolean, + /** + * When false, once tracking starts, won't try to drag if the touch moves. + * The default value is true. + * @platform ios + */ canCancelContentTouches?: ?boolean, + /** + * When set, the scroll view will adjust the scroll position so that the first child that is + * currently visible and at or beyond `minIndexForVisible` will not change position. This is + * useful for lists that are loading content in both directions, e.g. a chat thread, where new + * messages coming in might otherwise cause the scroll position to jump. A value of 0 is common, + * but other values such as 1 can be used to skip loading spinners or other content that should + * not maintain position. + * + * The optional `autoscrollToTopThreshold` can be used to make the content automatically scroll + * to the top after making the adjustment if the user was within the threshold of the top before + * the adjustment was made. This is also useful for chat-like applications where you want to see + * new messages scroll into place, but not if the user has scrolled up a ways and it would be + * disruptive to scroll a bunch. + * + * Caveat 1: Reordering elements in the scrollview with this enabled will probably cause + * jumpiness and jank. It can be fixed, but there are currently no plans to do so. For now, + * don't re-order the content of any ScrollViews or Lists that use this feature. + * + * Caveat 2: This simply uses `contentOffset` and `frame.origin` in native code to compute + * visibility. Occlusion, transforms, and other complexity won't be taken into account as to + * whether content is "visible" or not. + * + * @platform ios + */ maintainVisibleContentPosition?: ?$ReadOnly<{| minIndexForVisible: number, autoscrollToTopThreshold?: ?number, |}>, + /** + * The maximum allowed zoom scale. The default value is 1.0. + * @platform ios + */ maximumZoomScale?: ?number, + /** + * The minimum allowed zoom scale. The default value is 1.0. + * @platform ios + */ minimumZoomScale?: ?number, + /** + * When true, ScrollView allows use of pinch gestures to zoom in and out. + * The default value is true. + * @platform ios + */ pinchGestureEnabled?: ?boolean, + /** + * This controls how often the scroll event will be fired while scrolling + * (as a time interval in ms). A lower number yields better accuracy for code + * that is tracking the scroll position, but can lead to scroll performance + * problems due to the volume of information being send over the bridge. + * You will not notice a difference between values set between 1-16 as the + * JS run loop is synced to the screen refresh rate. If you do not need precise + * scroll position tracking, set this value higher to limit the information + * being sent across the bridge. The default value is zero, which results in + * the scroll event being sent only once each time the view is scrolled. + * @platform ios + */ scrollEventThrottle?: ?number, + /** + * The amount by which the scroll view indicators are inset from the edges + * of the scroll view. This should normally be set to the same value as + * the `contentInset`. Defaults to `{0, 0, 0, 0}`. + * @platform ios + */ scrollIndicatorInsets?: ?EdgeInsetsProp, + /** + * When true, the scroll view scrolls to top when the status bar is tapped. + * The default value is true. + * @platform ios + */ scrollsToTop?: ?boolean, + /** + * When true, shows a horizontal scroll indicator. + * The default value is true. + */ showsHorizontalScrollIndicator?: ?boolean, + /** + * When `snapToInterval` is set, `snapToAlignment` will define the relationship + * of the snapping to the scroll view. + * + * - `'start'` (the default) will align the snap at the left (horizontal) or top (vertical) + * - `'center'` will align the snap in the center + * - `'end'` will align the snap at the right (horizontal) or bottom (vertical) + * + * @platform ios + */ snapToAlignment?: ?('start' | 'center' | 'end'), + /** + * The current scale of the scroll view content. The default value is 1.0. + * @platform ios + */ zoomScale?: ?number, + /** + * This property specifies how the safe area insets are used to modify the + * content area of the scroll view. The default value of this property is + * "never". Available on iOS 11 and later. + * @platform ios + */ contentInsetAdjustmentBehavior?: ?( | 'automatic' | 'scrollableAxes' | 'never' | 'always' ), + /** + * When true, ScrollView will emit updateChildFrames data in scroll events, + * otherwise will not compute or emit child frame data. This only exists + * to support legacy issues, `onLayout` should be used instead to retrieve + * frame data. + * The default value is false. + * @platform ios + */ DEPRECATED_sendUpdatedChildFrames?: ?boolean, |}>; type AndroidProps = $ReadOnly<{| + /** + * Enables nested scrolling for Android API level 21+. + * Nested scrolling is supported by default on iOS + * @platform android + */ nestedScrollEnabled?: ?boolean, + /** + * Sometimes a scrollview takes up more space than its content fills. When this is + * the case, this prop will fill the rest of the scrollview with a color to avoid setting + * a background and creating unnecessary overdraw. This is an advanced optimization + * that is not needed in the general case. + * @platform android + */ endFillColor?: ?ColorValue, + /** + * Tag used to log scroll performance on this scroll view. Will force + * momentum events to be turned on (see sendMomentumEvents). This doesn't do + * anything out of the box and you need to implement a custom native + * FpsListener for it to be useful. + * @platform android + */ scrollPerfTag?: ?string, + /** + * Used to override default value of overScroll mode. + * + * Possible values: + * + * - `'auto'` - Default value, allow a user to over-scroll + * this view only if the content is large enough to meaningfully scroll. + * - `'always'` - Always allow a user to over-scroll this view. + * - `'never'` - Never allow a user to over-scroll this view. + * + * @platform android + */ overScrollMode?: ?('auto' | 'always' | 'never'), |}>; type VRProps = $ReadOnly<{| - scrollBarThumbImage?: ?($ReadOnly<{||}> | number), + /** + * Optionally an image can be used for the scroll bar thumb. This will + * override the color. While the image is loading or the image fails to + * load the color will be used instead. Use an alpha of 0 in the color + * to avoid seeing it while the image is loading. + * + * - `uri` - a string representing the resource identifier for the image, which + * should be either a local file path or the name of a static image resource + * - `number` - Opaque type returned by something like + * `import IMAGE from './image.jpg'`. + * @platform vr + */ + scrollBarThumbImage?: ?($ReadOnly<{||}> | number), // Opaque type returned by import IMAGE from './image.jpg' |}>; export type Props = $ReadOnly<{| @@ -128,30 +342,153 @@ export type Props = $ReadOnly<{| ...AndroidProps, ...VRProps, + /** + * These styles will be applied to the scroll view content container which + * wraps all of the child views. Example: + * + * ``` + * return ( + * + * + * ); + * ... + * const styles = StyleSheet.create({ + * contentContainer: { + * paddingVertical: 20 + * } + * }); + * ``` + */ contentContainerStyle?: ?ViewStyleProp, + /** + * When true, the scroll view's children are arranged horizontally in a row + * instead of vertically in a column. The default value is false. + */ horizontal?: ?boolean, + /** + * If sticky headers should stick at the bottom instead of the top of the + * ScrollView. This is usually used with inverted ScrollViews. + */ invertStickyHeaders?: ?boolean, + /** + * Determines whether the keyboard gets dismissed in response to a drag. + * + * *Cross platform* + * + * - `'none'` (the default), drags do not dismiss the keyboard. + * - `'on-drag'`, the keyboard is dismissed when a drag begins. + * + * *iOS Only* + * + * - `'interactive'`, the keyboard is dismissed interactively with the drag and moves in + * synchrony with the touch; dragging upwards cancels the dismissal. + * On android this is not supported and it will have the same behavior as 'none'. + */ keyboardDismissMode?: ?( | 'none' // default | 'on-drag' // cross-platform | 'interactive' ), // ios only + /** + * Determines when the keyboard should stay visible after a tap. + * + * - `'never'` (the default), tapping outside of the focused text input when the keyboard + * is up dismisses the keyboard. When this happens, children won't receive the tap. + * - `'always'`, the keyboard will not dismiss automatically, and the scroll view will not + * catch taps, but children of the scroll view can catch taps. + * - `'handled'`, the keyboard will not dismiss automatically when the tap was handled by + * a children, (or captured by an ancestor). + * - `false`, deprecated, use 'never' instead + * - `true`, deprecated, use 'always' instead + */ // $FlowFixMe Issues found when typing ScrollView keyboardShouldPersistTaps?: ?('always' | 'never' | 'handled' | false | true), + /** + * Called when the momentum scroll starts (scroll which occurs as the ScrollView glides to a stop). + */ onMomentumScrollBegin?: ?Function, + /** + * Called when the momentum scroll ends (scroll which occurs as the ScrollView glides to a stop). + */ onMomentumScrollEnd?: ?Function, + /** + * Fires at most once per frame during scrolling. The frequency of the + * events can be controlled using the `scrollEventThrottle` prop. + */ onScroll?: ?Function, + /** + * Called when the user begins to drag the scroll view. + */ onScrollBeginDrag?: ?Function, + /** + * Called when the user stops dragging the scroll view and it either stops + * or begins to glide. + */ onScrollEndDrag?: ?Function, + /** + * Called when scrollable content view of the ScrollView changes. + * + * Handler function is passed the content width and content height as parameters: + * `(contentWidth, contentHeight)` + * + * It's implemented using onLayout handler attached to the content container + * which this ScrollView renders. + */ onContentSizeChange?: ?Function, onKeyboardDidShow?: (event: PressEvent) => void, + /** + * When true, the scroll view stops on multiples of the scroll view's size + * when scrolling. This can be used for horizontal pagination. The default + * value is false. + * + * Note: Vertical pagination is not supported on Android. + */ pagingEnabled?: ?boolean, + /** + * When false, the view cannot be scrolled via touch interaction. + * The default value is true. + * + * Note that the view can always be scrolled by calling `scrollTo`. + */ scrollEnabled?: ?boolean, + /** + * When true, shows a vertical scroll indicator. + * The default value is true. + */ showsVerticalScrollIndicator?: ?boolean, + /** + * An array of child indices determining which children get docked to the + * top of the screen when scrolling. For example, passing + * `stickyHeaderIndices={[0]}` will cause the first child to be fixed to the + * top of the scroll view. This property is not supported in conjunction + * with `horizontal={true}`. + */ stickyHeaderIndices?: ?$ReadOnlyArray, + /** + * When set, causes the scroll view to stop at multiples of the value of + * `snapToInterval`. This can be used for paginating through children + * that have lengths smaller than the scroll view. Typically used in + * combination with `snapToAlignment` and `decelerationRate="fast"` on ios. + * Overrides less configurable `pagingEnabled` prop. + * + * Supported for horizontal scrollview on android. + */ snapToInterval?: ?number, + /** + * Experimental: When true, offscreen child views (whose `overflow` value is + * `hidden`) are removed from their native backing superview when offscreen. + * This can improve scrolling performance on long lists. The default value is + * true. + */ removeClippedSubviews?: ?boolean, + /** + * A RefreshControl component, used to provide pull-to-refresh + * functionality for the ScrollView. Only works for vertical ScrollViews + * (`horizontal` prop must be `false`). + * + * See [RefreshControl](docs/refreshcontrol.html). + */ refreshControl?: ?React.Element, style?: ?ViewStyleProp, children?: React.Node, @@ -196,163 +533,33 @@ const ScrollView = createReactClass({ displayName: 'ScrollView', propTypes: { ...ViewPropTypes, - /** - * Controls whether iOS should automatically adjust the content inset - * for scroll views that are placed behind a navigation bar or - * tab bar/ toolbar. The default value is true. - * @platform ios - */ automaticallyAdjustContentInsets: PropTypes.bool, - /** - * The amount by which the scroll view content is inset from the edges - * of the scroll view. Defaults to `{top: 0, left: 0, bottom: 0, right: 0}`. - * @platform ios - */ contentInset: EdgeInsetsPropType, - /** - * Used to manually set the starting scroll offset. - * The default value is `{x: 0, y: 0}`. - * @platform ios - */ contentOffset: PointPropType, - /** - * When true, the scroll view bounces when it reaches the end of the - * content if the content is larger then the scroll view along the axis of - * the scroll direction. When false, it disables all bouncing even if - * the `alwaysBounce*` props are true. The default value is true. - * @platform ios - */ bounces: PropTypes.bool, - /** - * When true, gestures can drive zoom past min/max and the zoom will animate - * to the min/max value at gesture end, otherwise the zoom will not exceed - * the limits. - * @platform ios - */ bouncesZoom: PropTypes.bool, - /** - * When true, the scroll view bounces horizontally when it reaches the end - * even if the content is smaller than the scroll view itself. The default - * value is true when `horizontal={true}` and false otherwise. - * @platform ios - */ alwaysBounceHorizontal: PropTypes.bool, - /** - * When true, the scroll view bounces vertically when it reaches the end - * even if the content is smaller than the scroll view itself. The default - * value is false when `horizontal={true}` and true otherwise. - * @platform ios - */ alwaysBounceVertical: PropTypes.bool, - /** - * When true, the scroll view automatically centers the content when the - * content is smaller than the scroll view bounds; when the content is - * larger than the scroll view, this property has no effect. The default - * value is false. - * @platform ios - */ centerContent: PropTypes.bool, - /** - * These styles will be applied to the scroll view content container which - * wraps all of the child views. Example: - * - * ``` - * return ( - * - * - * ); - * ... - * const styles = StyleSheet.create({ - * contentContainer: { - * paddingVertical: 20 - * } - * }); - * ``` - */ contentContainerStyle: StyleSheetPropType(ViewStylePropTypes), - /** - * A floating-point number that determines how quickly the scroll view - * decelerates after the user lifts their finger. You may also use string - * shortcuts `"normal"` and `"fast"` which match the underlying iOS settings - * for `UIScrollViewDecelerationRateNormal` and - * `UIScrollViewDecelerationRateFast` respectively. - * - * - `'normal'`: 0.998 (the default) - * - `'fast'`: 0.99 - * - * @platform ios - */ decelerationRate: PropTypes.oneOfType([ PropTypes.oneOf(['fast', 'normal']), PropTypes.number, ]), - /** - * When true, the scroll view's children are arranged horizontally in a row - * instead of vertically in a column. The default value is false. - */ horizontal: PropTypes.bool, - /** - * The style of the scroll indicators. - * - * - `'default'` (the default), same as `black`. - * - `'black'`, scroll indicator is black. This style is good against a light background. - * - `'white'`, scroll indicator is white. This style is good against a dark background. - * - * @platform ios - */ indicatorStyle: PropTypes.oneOf([ 'default', // default 'black', 'white', ]), - /** - * If sticky headers should stick at the bottom instead of the top of the - * ScrollView. This is usually used with inverted ScrollViews. - */ invertStickyHeaders: PropTypes.bool, - /** - * When true, the ScrollView will try to lock to only vertical or horizontal - * scrolling while dragging. The default value is false. - * @platform ios - */ directionalLockEnabled: PropTypes.bool, - /** - * When false, once tracking starts, won't try to drag if the touch moves. - * The default value is true. - * @platform ios - */ canCancelContentTouches: PropTypes.bool, - /** - * Determines whether the keyboard gets dismissed in response to a drag. - * - * *Cross platform* - * - * - `'none'` (the default), drags do not dismiss the keyboard. - * - `'on-drag'`, the keyboard is dismissed when a drag begins. - * - * *iOS Only* - * - * - `'interactive'`, the keyboard is dismissed interactively with the drag and moves in - * synchrony with the touch; dragging upwards cancels the dismissal. - * On android this is not supported and it will have the same behavior as 'none'. - */ keyboardDismissMode: PropTypes.oneOf([ 'none', // default 'on-drag', // Cross-platform 'interactive', // iOS-only ]), - /** - * Determines when the keyboard should stay visible after a tap. - * - * - `'never'` (the default), tapping outside of the focused text input when the keyboard - * is up dismisses the keyboard. When this happens, children won't receive the tap. - * - `'always'`, the keyboard will not dismiss automatically, and the scroll view will not - * catch taps, but children of the scroll view can catch taps. - * - `'handled'`, the keyboard will not dismiss automatically when the tap was handled by - * a children, (or captured by an ancestor). - * - `false`, deprecated, use 'never' instead - * - `true`, deprecated, use 'always' instead - */ keyboardShouldPersistTaps: PropTypes.oneOf([ 'always', 'never', @@ -360,257 +567,50 @@ const ScrollView = createReactClass({ false, true, ]), - /** - * When set, the scroll view will adjust the scroll position so that the first child that is - * currently visible and at or beyond `minIndexForVisible` will not change position. This is - * useful for lists that are loading content in both directions, e.g. a chat thread, where new - * messages coming in might otherwise cause the scroll position to jump. A value of 0 is common, - * but other values such as 1 can be used to skip loading spinners or other content that should - * not maintain position. - * - * The optional `autoscrollToTopThreshold` can be used to make the content automatically scroll - * to the top after making the adjustment if the user was within the threshold of the top before - * the adjustment was made. This is also useful for chat-like applications where you want to see - * new messages scroll into place, but not if the user has scrolled up a ways and it would be - * disruptive to scroll a bunch. - * - * Caveat 1: Reordering elements in the scrollview with this enabled will probably cause - * jumpiness and jank. It can be fixed, but there are currently no plans to do so. For now, - * don't re-order the content of any ScrollViews or Lists that use this feature. - * - * Caveat 2: This simply uses `contentOffset` and `frame.origin` in native code to compute - * visibility. Occlusion, transforms, and other complexity won't be taken into account as to - * whether content is "visible" or not. - * - * @platform ios - */ maintainVisibleContentPosition: PropTypes.shape({ minIndexForVisible: PropTypes.number.isRequired, autoscrollToTopThreshold: PropTypes.number, }), - /** - * The maximum allowed zoom scale. The default value is 1.0. - * @platform ios - */ maximumZoomScale: PropTypes.number, - /** - * The minimum allowed zoom scale. The default value is 1.0. - * @platform ios - */ minimumZoomScale: PropTypes.number, - /** - * Enables nested scrolling for Android API level 21+. - * Nested scrolling is supported by default on iOS - * @platform android - */ nestedScrollEnabled: PropTypes.bool, - /** - * Called when the momentum scroll starts (scroll which occurs as the ScrollView glides to a stop). - */ onMomentumScrollBegin: PropTypes.func, - /** - * Called when the momentum scroll ends (scroll which occurs as the ScrollView glides to a stop). - */ onMomentumScrollEnd: PropTypes.func, - /** - * Fires at most once per frame during scrolling. The frequency of the - * events can be controlled using the `scrollEventThrottle` prop. - */ onScroll: PropTypes.func, - /** - * Called when the user begins to drag the scroll view. - */ onScrollBeginDrag: PropTypes.func, - /** - * Called when the user stops dragging the scroll view and it either stops - * or begins to glide. - */ onScrollEndDrag: PropTypes.func, - /** - * Called when scrollable content view of the ScrollView changes. - * - * Handler function is passed the content width and content height as parameters: - * `(contentWidth, contentHeight)` - * - * It's implemented using onLayout handler attached to the content container - * which this ScrollView renders. - */ onContentSizeChange: PropTypes.func, - /** - * When true, the scroll view stops on multiples of the scroll view's size - * when scrolling. This can be used for horizontal pagination. The default - * value is false. - * - * Note: Vertical pagination is not supported on Android. - */ pagingEnabled: PropTypes.bool, - /** - * When true, ScrollView allows use of pinch gestures to zoom in and out. - * The default value is true. - * @platform ios - */ pinchGestureEnabled: PropTypes.bool, - /** - * When false, the view cannot be scrolled via touch interaction. - * The default value is true. - * - * Note that the view can always be scrolled by calling `scrollTo`. - */ scrollEnabled: PropTypes.bool, - /** - * This controls how often the scroll event will be fired while scrolling - * (as a time interval in ms). A lower number yields better accuracy for code - * that is tracking the scroll position, but can lead to scroll performance - * problems due to the volume of information being send over the bridge. - * You will not notice a difference between values set between 1-16 as the - * JS run loop is synced to the screen refresh rate. If you do not need precise - * scroll position tracking, set this value higher to limit the information - * being sent across the bridge. The default value is zero, which results in - * the scroll event being sent only once each time the view is scrolled. - * @platform ios - */ scrollEventThrottle: PropTypes.number, - /** - * The amount by which the scroll view indicators are inset from the edges - * of the scroll view. This should normally be set to the same value as - * the `contentInset`. Defaults to `{0, 0, 0, 0}`. - * @platform ios - */ scrollIndicatorInsets: EdgeInsetsPropType, - /** - * When true, the scroll view scrolls to top when the status bar is tapped. - * The default value is true. - * @platform ios - */ scrollsToTop: PropTypes.bool, - /** - * When true, shows a horizontal scroll indicator. - * The default value is true. - */ showsHorizontalScrollIndicator: PropTypes.bool, - /** - * When true, shows a vertical scroll indicator. - * The default value is true. - */ showsVerticalScrollIndicator: PropTypes.bool, - /** - * An array of child indices determining which children get docked to the - * top of the screen when scrolling. For example, passing - * `stickyHeaderIndices={[0]}` will cause the first child to be fixed to the - * top of the scroll view. This property is not supported in conjunction - * with `horizontal={true}`. - */ stickyHeaderIndices: PropTypes.arrayOf(PropTypes.number), - /** - * When set, causes the scroll view to stop at multiples of the value of - * `snapToInterval`. This can be used for paginating through children - * that have lengths smaller than the scroll view. Typically used in - * combination with `snapToAlignment` and `decelerationRate="fast"` on ios. - * Overrides less configurable `pagingEnabled` prop. - * - * Supported for horizontal scrollview on android. - */ snapToInterval: PropTypes.number, - /** - * When `snapToInterval` is set, `snapToAlignment` will define the relationship - * of the snapping to the scroll view. - * - * - `'start'` (the default) will align the snap at the left (horizontal) or top (vertical) - * - `'center'` will align the snap in the center - * - `'end'` will align the snap at the right (horizontal) or bottom (vertical) - * - * @platform ios - */ snapToAlignment: PropTypes.oneOf([ 'start', // default 'center', 'end', ]), - /** - * Experimental: When true, offscreen child views (whose `overflow` value is - * `hidden`) are removed from their native backing superview when offscreen. - * This can improve scrolling performance on long lists. The default value is - * true. - */ removeClippedSubviews: PropTypes.bool, - /** - * The current scale of the scroll view content. The default value is 1.0. - * @platform ios - */ zoomScale: PropTypes.number, - /** - * This property specifies how the safe area insets are used to modify the - * content area of the scroll view. The default value of this property is - * "never". Available on iOS 11 and later. - * @platform ios - */ contentInsetAdjustmentBehavior: PropTypes.oneOf([ 'automatic', 'scrollableAxes', 'never', // default 'always', ]), - /** - * A RefreshControl component, used to provide pull-to-refresh - * functionality for the ScrollView. Only works for vertical ScrollViews - * (`horizontal` prop must be `false`). - * - * See [RefreshControl](docs/refreshcontrol.html). - */ refreshControl: PropTypes.element, - /** - * Sometimes a scrollview takes up more space than its content fills. When this is - * the case, this prop will fill the rest of the scrollview with a color to avoid setting - * a background and creating unnecessary overdraw. This is an advanced optimization - * that is not needed in the general case. - * @platform android - */ endFillColor: ColorPropType, - /** - * Tag used to log scroll performance on this scroll view. Will force - * momentum events to be turned on (see sendMomentumEvents). This doesn't do - * anything out of the box and you need to implement a custom native - * FpsListener for it to be useful. - * @platform android - */ scrollPerfTag: PropTypes.string, - /** - * Used to override default value of overScroll mode. - * - * Possible values: - * - * - `'auto'` - Default value, allow a user to over-scroll - * this view only if the content is large enough to meaningfully scroll. - * - `'always'` - Always allow a user to over-scroll this view. - * - `'never'` - Never allow a user to over-scroll this view. - * - * @platform android - */ overScrollMode: PropTypes.oneOf(['auto', 'always', 'never']), - /** - * When true, ScrollView will emit updateChildFrames data in scroll events, - * otherwise will not compute or emit child frame data. This only exists - * to support legacy issues, `onLayout` should be used instead to retrieve - * frame data. - * The default value is false. - * @platform ios - */ DEPRECATED_sendUpdatedChildFrames: PropTypes.bool, - /** - * Optionally an image can be used for the scroll bar thumb. This will - * override the color. While the image is loading or the image fails to - * load the color will be used instead. Use an alpha of 0 in the color - * to avoid seeing it while the image is loading. - * - * - `uri` - a string representing the resource identifier for the image, which - * should be either a local file path or the name of a static image resource - * - `number` - Opaque type returned by something like - * `import IMAGE from './image.jpg'`. - * @platform vr - */ scrollBarThumbImage: PropTypes.oneOfType([ PropTypes.shape({ uri: PropTypes.string,