React Native - 在特定位置滚动Listview - 以编程方式

时间:2016-03-17 08:36:35

标签: listview react-native react-native-listview react-native-scrollview

在使用Objective-C的iOS中,我们可以使用UITableView方法将scrollToRowAtIndexPath滚动到特定的行索引,但在React-Native中我找不到这种滚动Listview的方法在特定的行索引。

以下是该方案,

  1. Listview有这样的可扩展行,例如点按它时会展开,可扩展行包含TextInput组件。
  2. TextInput中输入文字时,键盘会显示出来,理想情况下,Listview应该向上滚动(键盘下降Listview时应向下滚动到它以前的位置)。
  3. 使用Native-iOS可以很容易地实现这一点,但我陷入了React-Native。

    enter image description here

    我按照方式行事但未能实现

    scrollTo(x:0,y:10,animated:true)组件中有一个名为Listview的方法(实际上是Scrollview的方法),可以根据 y坐标向上/向下滚动

    我成功收到了键盘的Up& amp;在我的代码中关闭事件并根据我可以用键盘启动时scrollTo方法(通过计算 y坐标)进行管理(如@ Alexey的回答中提到的那样)但是当键盘关闭时,我不知道如何计算 y坐标? (理想情况下,此时Listview应向下滚动到其先前的位置。)

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

1 个答案:

答案 0 :(得分:5)

row height * item index怎么样?我们假设您要在ListView中滚动到第20个元素。每行都有height: 50。我们使用上面提到的公式I计算第20个元素的偏移量:50 * 20 = 1000。然后使用scrollTo(0, 1000),您将滚动到所需的元素。

为了能够向后滚动,您需要在应用scrollTo函数之前存储偏移量:

var scrollProperties = this.refs.listView.scrollProperties;
var scrollOffset = scrollProperties.contentLength - scrollProperties.visibleLength;

在您点击键盘的事件(keyboardWillHide上的DeviceEventEmitter)后,您可以scrollTo执行上一次偏移。