是否有可能保持滚动浏览滚动到底部?
对于类似聊天的应用程序,我希望将滚动视图组件滚动到底部,因为最新的消息显示在较旧的消息下面。 我们可以调整滚动视图的滚动位置吗?
对于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)
一起滚动到底部的时候,你实际上是滚动到视图的顶部,所有内容翻转(导致滚动到底部)。
这种方法有一点点黑客,但我找不到更好的方法
- 首先添加一个裁判你的ScrollView。
- 其次在closures您的ScrollView标签之前添加一个虚拟视图
- 获取该虚拟视图的y位置
- 每当你想滚动到底部滚动到虚拟视图的位置
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”方法。