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,