我目前正在使用 ListView 来显示一些数据。由于设计原因,行占据了屏幕高度的 70% 左右,这意味着始终至少有 2 行可见,最多为 3 行。我想确定的是哪一行最明显。
我目前正在使用 onChangeVisibleRows,但这只是告诉我哪些行可见或已进入或离开视图。
有任何想法吗?
我目前正在使用 ListView 来显示一些数据。由于设计原因,行占据了屏幕高度的 70% 左右,这意味着始终至少有 2 行可见,最多为 3 行。我想确定的是哪一行最明显。
我目前正在使用 onChangeVisibleRows,但这只是告诉我哪些行可见或已进入或离开视图。
有任何想法吗?
这仅在您知道一次可见 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]
}
}
需要注意的是,它不能完美地映射到最可见的行被认为是可见的。但是,在使用它时,它在滚动时是有意义的。在我的特定应用程序中,活动行和非活动行之间存在明显的变化,因此它可以帮助用户了解发生了什么。
我没有足够的时间为您的问题设计一个准确的算法。但这是你可以做的-
获取滚动位置。 React Native:获取滚动视图的当前滚动位置
获取屏幕高度。 https://facebook.github.io/react-native/docs/dimensions.html#content
计算大约。ListView 子项的高度。
您可以利用这三件事来找出特定孩子占用了多少空间。
通过获取滚动位置,您可以知道您向下滚动了多少像素。将其除以您孩子的身高,这样您就可以获得用户滚动了多少孩子。
(Scrolled height / Child height) = No. of children scrolled.
最后,onChangeVisibleRows
会告诉你哪些孩子是可见的。祝你好运!