3

我目前正在使用 ListView 来显示一些数据。由于设计原因,行占据了屏幕高度的 70% 左右,这意味着始终至少有 2 行可见,最多为 3 行。我想确定的是哪一行最明显。

我目前正在使用 onChangeVisibleRows,但这只是告诉我哪些行可见或已进入或离开视图。

有任何想法吗?

4

2 回答 2

2

这仅在您知道一次可见 2-3 行(不多也不少)时才有效:

onChangeVisibleRows={(visibleRows) => {
    const visibleRowNumbers = Object.keys(visibleRows.s1).map((row) => parseInt(row));
    if (visibleRowNumbers.length === 2) {
        // visible row is visibleRowNumbers[0]
    }
    if (visibleRowNumbers.length === 3) {
        // visible row is visibleRowNumbers[1]
    }
}

需要注意的是,它不能完美地映射到最可见的行被认为是可见的。但是,在使用它时,它在滚动时是有意义的。在我的特定应用程序中,活动行和非活动行之间存在明显的变化,因此它可以帮助用户了解发生了什么。

于 2016-04-01T20:34:04.970 回答
1

我没有足够的时间为您的问题设计一个准确的算法。但这是你可以做的-

  1. 获取滚动位置。 React Native:获取滚动视图的当前滚动位置

  2. 获取屏幕高度。 https://facebook.github.io/react-native/docs/dimensions.html#content

  3. 计算大约。ListView 子项的高度。

您可以利用这三件事来找出特定孩子占用了多少空间。

通过获取滚动位置,您可以知道您向下滚动了多少像素。将其除以您孩子的身高,这样您就可以获得用户滚动了多少孩子。

(Scrolled height / Child height) = No. of children scrolled. 

最后,onChangeVisibleRows会告诉你哪些孩子是可见的。祝你好运!

于 2016-03-30T05:51:49.690 回答