是否有可能保持滚动浏览滚动到底部?

对于类似聊天的应用程序,我希望将滚动视图组件滚动到底部,因为最新的消息显示在较旧的消息下面。 我们可以调整滚动视图的滚动位置吗?

对于RN 0.40及更低版本 ,以下是解决scheme。

<ScrollView ref={ref => this.scrollView = ref} onContentSizeChange={(contentWidth, contentHeight)=>{ this.scrollView.scrollTo({y: contentHeight, animated: true}); }}> </ScrollView> 

对于RN 0.41及更高版本,此function已提供 。 以下是解决scheme。

 <ScrollView ref={ref => this.scrollView = ref} onContentSizeChange={(contentWidth, contentHeight)=>{ this.scrollView.scrollToEnd({animated: true}); }}> </ScrollView> 

请参考这个对于RN 0.41和更高的版本 : https : //facebook.github.io/react-native/docs/scrollview.html#scrolltoend

使用onContentSizeChange跟踪滚动视图的底部Y(高度)

https://facebook.github.io/react-native/docs/scrollview.html#oncontentsizechange

 var _scrollToBottomY <ScrollView onContentSizeChange={(contentWidth, contentHeight)=>{ _scrollToBottomY = contentHeight; }}> </ScrollView> 

然后使用滚动视图的ref名称

 this.refs.scrollView.scrollTo(_scrollToBottomY); 

这是我可以召集的最简单的解决scheme:

 <ListView ref={ref => this.listView = ref} onLayout={event => { this.listViewHeight = event.nativeEvent.layout.height }} onContentSizeChange={() => { this.listView.scrollTo({y: this.listView.getMetrics().contentLength - this.listViewHeight}) }} /> 

您可以使用react-native-invertible-scroll-view模块反转滚动/列表视图: https : //github.com/exponentjs/react-native-invertible-scroll-view

然后简单地调用ref.scrollTo(0)滚动到底部。

这是可行的,因为react-native-invertible-scroll-view翻转整个视图的内容; 当你使用这个模块和ref.scrollTo(0)一起滚动到底部的时候,你实际上是滚动到视图的顶部,所有内容翻转(导致滚动到底部)。

这种方法有一点点黑客,但我找不到更好的方法

  1. 首先添加一个裁判你的ScrollView。
  2. 其次在closures您的ScrollView标签之前添加一个虚拟视图
  3. 获取该虚拟视图的y位置
  4. 每当你想滚动到底部滚动到虚拟视图的位置
 var footerY; //Y position of the dummy view render() { return ( <View> <ScrollView ref='_scrollView'> // This is where all the things that you want to display in the scroll view goes // Below is the dummy View <View onLayout={(e)=> { footerY = e.nativeEvent.layout.y; }}/> </ScrollView> //Below is the button to scroll to the bottom <TouchableHighlight onPress={() => { this.refs._scrollView.scrollTo(footerY); }}> <Text>Scroll to Bottom</Text> </TouchableHighlight> </View> ); } 

这回答你的问题: https : //stackoverflow.com/a/39563100/1917250

您需要通过计算内容的高度减去其scrollView的高度不断滚动到页面的底部。

尝试将滚动视图的contentOffset属性设置为内容的当前高度。

为了完成你所需要的事情,你可以把它作为onScroll事件的一部分。 但是,这可能会导致不良的用户体验,因此只有在附加新消息时才能做到这一点,这样做可能会更方便用户。

我有一个类似的问题,但在阅读这个页面(这让我很头疼!)我发现这个非常好的npm包 ,它只是反转ListView,使一切聊天应用程序容易!

有点晚了…但看看这个问题。 滚动到ScrollView的顶部

ScrollView有一个“scrollTo”方法。