React Native - 在特定位置编程滚动列表视图

3
在iOS中,我们可以使用scrollToRowAtIndexPath方法使UITableView滚动到特定行索引,但在React-Native中,我没有找到类似的方法来滚动到Listview的特定行索引。
以下是场景:
1.有一个带有可扩展行的Listview,当点击时会展开,并且可扩展行包含TextInput组件。 2.在TextInput中输入文本时,键盘将显示出来,并且理想情况下,在此时Listview应向上滚动(一旦键盘下降Listview应向下滚动到其先前的位置)。
这在Native-iOS中很容易实现,但我在React-Native中卡住了。

enter image description here


我尝试了以下方法,但效果不佳

Listview组件中有一种叫做scrollTo(x:0,y:10,animated:true)的方法(实际上是Scrollview的方法),可以根据父视图的y坐标上下滚动。

我成功地在我的代码中接收到了键盘的上下事件,并根据此可以通过计算scrollTo方法(如@Alexey的回答中所述)中的y坐标来进行某种程度的管理,但我不知道当键盘关闭时如何计算y坐标?(理想情况下,在这个时刻,Listview应该向下滚动到其之前的位置)。

任何帮助或提示都将不胜感激!


我在这里也有同样的问题:https://dev59.com/bJLea4cB1Zd3GeqP8_IH - Ben Clayton
1个回答

5
关于 行高 * 项目索引 呢?比如说你想要滚动到 ListView 中的第20个元素。每一行的高度为 50。我们可以使用上述公式计算出第20个元素的偏移量:50 * 20 = 1000。然后使用 scrollTo(0, 1000),就可以滚动到所需元素。
为了能够回滚,你需要在应用 scrollTo 函数之前存储一个偏移量:
var scrollProperties = this.refs.listView.scrollProperties;
var scrollOffset = scrollProperties.contentLength - scrollProperties.visibleLength;

当你连接到键盘事件(DeviceEventEmitterkeyboardWillHide)之后,你可以使用scrollTo将滚动位置恢复到以前的偏移量。


谢谢你的回答。是的,我已经想到了这个技巧。但是当键盘关闭时,它会出现问题。此时,理想情况下,ListView 应该滚动到其先前的位置,但是我怎么知道它的先前位置呢?希望你能理解我的问题..!请在我的问题中检查第二点“(一旦键盘关闭,ListView 应该滚动到其先前的位置)”。 - Nirav Dangi
好的,在这种情况下,您存储先前的偏移量。 - Alexey Kureev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接