【发布时间】:2016-07-18 11:13:50
【问题描述】:
我有一个活动部分,其中的部分标题包含日期。我需要能够跳转到特定日期,并将初始滚动位置设置为未来的第一个日期。
为了跳转到特定日期,我尝试将它们的 y 位置存储在 state 中。
renderSectionHeader= (sectionData, sectionID) => (
<View
onLayout={(event) => {
const { y } = event.nativeEvent.layout;
const sectionPosition = { [sectionID]: y };
const sectionPositions = Object.assign({}, this.state.sectionPositions, sectionPosition);
this.setState({ sectionPositions });
}}
...
我在使用这种方法时遇到了问题,因为在列表更靠后的元素上没有调用 renderSectionHeader(由于延迟渲染)。
然后我尝试用数学方法计算位置,但这会导致每个部分的渲染显示在屏幕上,同时它正在接近给定日期。
有没有办法实现我的需要?
相关
React Native ListView: How to scroll to a particular row
https://github.com/facebook/react-native/issues/499
更新
在我的应用中,我知道所有行的高度完全相同。
使用contentOffset={{ y: offsetY }} 而不是setScroll 不起作用,因为它仍然需要渲染所有项目直到给定项目才能工作。
使用initialListSize={99999999} 确实有效,但会使页面变慢,我已被警告不要使用它。
更新 2
是否可以将我的初始内容提供给数据源,然后更新数据以在当前屏幕上的元素之前和之后添加额外的项目?
或者是否有一个我没有找到的库可以满足我的需求?
【问题讨论】:
-
如果你在加载数据之前存储了 y 位置,那么它们就不再相关了,对吧?
-
存储的 y 位置很好,我可以滚动到这些位置,问题是由于延迟渲染,只有部分节标题被渲染,所以我无法滚动到列表下方的项目
-
"'你不能吃你的蛋糕'",如果你想要延迟加载,这就是它的意思,你懒加载整个
listView。我认为即使在本机(iOS)上你也会遇到这个问题。 -
刚刚尝试将 initialListSize 设置为一个巨大的数字,这种方法很有效,尽管加载页面需要很长时间。也许发行版不会那么糟糕...
-
“刚刚尝试将 initialListSize 设置为一个巨大的数字” - 不要这样做,它会导致精神病。
标签: javascript react-native react-native-listview react-native-scrollview