mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-04-23 20:01:01 +08:00
Add scrollToEnd to ScrollView and ListView
Summary: **Motivation** A basic task of making a React Native ScrollView or ListView scroll to the bottom is currently very hard to accomplish: - https://github.com/facebook/react-native/issues/8003 - https://github.com/facebook/react-native/issues/913 - http://stackoverflow.com/questions/29829375/how-to-scroll-to-bottom-in-react-native-listview **NOTE:** If you're building something like a chat app where you want a ListView to keep scrolling to the bottom at all times, it's easiest to use the [react-native-invertible-scrollview](https://github.com/exponent/react-native-invertible-scroll-view) component rather calling `scrollToEnd` manually when layout changes. The invertible-scrollview uses a clever trick to invert the direction of the ScrollView. This pull request adds a `scrollToEnd` method which scrolls to the bottom if the ScrollView is vertical, to the right if the ScrollView is horizontal. The implementation is based on this SO answer: http://stackoverflow.com/questions/952412/uiscrollview-scrol Closes https://github.com/facebook/react-native/pull/12088 Differential Revision: D4474974 Pulled By: mkonicek fbshipit-source-id: 6ecf8b3435f47dd3a31e2fd5be6859062711c233
This commit is contained in:
committed by
Facebook Github Bot
parent
81fe1a3618
commit
9dee696ed8
@@ -382,11 +382,11 @@ const ScrollView = React.createClass({
|
||||
/**
|
||||
* Scrolls to a given x, y offset, either immediately or with a smooth animation.
|
||||
*
|
||||
* Syntax:
|
||||
* Example:
|
||||
*
|
||||
* `scrollTo(options: {x: number = 0; y: number = 0; animated: boolean = true})`
|
||||
* `scrollTo({x: 0; y: 0; animated: true})`
|
||||
*
|
||||
* Note: The weird argument signature is due to the fact that, for historical reasons,
|
||||
* Note: The weird function signature is due to the fact that, for historical reasons,
|
||||
* the function also accepts separate arguments as as alternative to the options object.
|
||||
* This is deprecated due to ambiguity (y before x), and SHOULD NOT BE USED.
|
||||
*/
|
||||
@@ -404,7 +404,39 @@ const ScrollView = React.createClass({
|
||||
},
|
||||
|
||||
/**
|
||||
* Deprecated, do not use.
|
||||
* If this is a vertical ScrollView scrolls to the bottom.
|
||||
* If this is a horizontal ScrollView scrolls to the right.
|
||||
*
|
||||
* Use `scrollToEnd({animated: true})` for smooth animated scrolling,
|
||||
* `scrollToEnd({animated: false})` for immediate scrolling.
|
||||
* If no options are passed, `animated` defaults to true.
|
||||
*
|
||||
* See `ScrollView#scrollToEnd`.
|
||||
*/
|
||||
scrollToEnd: function(
|
||||
options?: { animated?: boolean },
|
||||
) {
|
||||
// Default to true
|
||||
const animated = (options && options.animated) !== false;
|
||||
if (Platform.OS === 'ios') {
|
||||
this.getScrollResponder().scrollResponderScrollToEnd({
|
||||
animated: animated,
|
||||
});
|
||||
} else if (Platform.OS === 'android') {
|
||||
// On Android scrolling past the end of the ScrollView gets clipped
|
||||
// - scrolls to the end.
|
||||
if (this.props.horizontal) {
|
||||
this.scrollTo({x: 10*1000*1000, animated: animated});
|
||||
} else {
|
||||
this.scrollTo({y: 10*1000*1000, animated: animated});
|
||||
}
|
||||
} else {
|
||||
console.warn('scrollToEnd is not supported on this platform');
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Deprecated, use `scrollTo` instead.
|
||||
*/
|
||||
scrollWithoutAnimationTo: function(y: number = 0, x: number = 0) {
|
||||
console.warn('`scrollWithoutAnimationTo` is deprecated. Use `scrollTo` instead');
|
||||
|
||||
Reference in New Issue
Block a user