我遇到了 FlatList 的 initialScrollIndex 的问题 - 简单地忽略了 initialScrollIndex 的参数并显示了第一项。
问问题
12495 次
5 回答
18
我有完全相同的问题,这就是我找到你的问题的原因。经过大量测试,我找到了一种解决方法,似乎可行。在呈现列表后,initialScrollIndex
我没有使用该函数。scrollToIndex
将其应用于您的代码,它看起来像
import React, { Component } from 'react';
import { FlatList, Dimensions, View, Text } from 'react-native';
const WIDTH = Dimensions.get('window').width;
const HEIGHT = Dimensions.get('window').height;
export default class App extends Component {
render() {
const data = [{id: 0},{id: 1},{id: 2},{id: 3},{id: 4}];
return (
<View onLayout={() => this.onLayout()}>
<FlatList
ref={el => this.list = el}
data={data}
renderItem={this.renderItem}
keyExtractor={item => item.id}
pagingEnabled={true}
horizontal={true}
showsHorizontalScrollIndicator={false}
getItemLayout={this.getItemLayout}
debug={true}
/>
</View>
)
}
onLayout() {
this.list.scrollToIndex({index: 2})
}
renderItem = ({ item }) => {
return (
<View style={{flex: 1, backgroundColor: 'lightblue', width: WIDTH, height: HEIGHT, justifyContent: 'center', alignItems: 'center'}}>
<Text style={{color: 'white', fontSize: 300, fontWeight: 'bold'}}>{item.id}</Text>
</View>
);
};
getItemLayout = (data, index) => (
{length: WIDTH, offset: WIDTH * index, index}
);
}
希望对你有效。
顺便说一句,放入this.list.scrollToIndex({index: 2})
componentDidMount,由于某种原因对我不起作用,这就是我onLayout
改用的原因
于 2017-06-14T20:13:11.810 回答
6
使用 RN 0.61.5
我已经通过设置解决了这个问题:
onContentSizeChange
每当更改平面列表数据并渲染所有项目时,它将处理滚动到索引(如果需要,您可以通过设置处理在初始渲染时将渲染多少项目initialNumToRender
)onScrollToIndexFailed
使用scrollToIndex
功能时必须使用:
<FlatList
ref={ref => (this.flatList = ref)}
data={dataArray}
style={style}
eyExtractor={(item, index) => String(index)}
onContentSizeChange={() => {
if (this.flatList && this.flatList.scrollToIndex && dataArray && dataArray.length) {
this.flatList.scrollToIndex({ index: dataArray.length - 1 });
}
}}
onScrollToIndexFailed={() => {}}
renderItem={({ item, index }) => {
return (
<Text>Stackoverflow Answer</Text>
);
}}
/>
于 2020-01-11T09:30:18.470 回答
2
我使用了 getItemLayout 并且每件事都像魅力一样工作
const getItemLayout=(data, index)=> {
return { length: wp(100), offset: wp(100)* index, index };
}
<FlatList
horizontal
pagingEnabled
initialScrollIndex={1}
snapToAlignment={"start"}
decelerationRate={"fast"}
showsHorizontalScrollIndicator={false}
data={routes}
getItemLayout={getItemLayout}
renderItem={rowItem}/>
于 2021-01-13T08:06:26.170 回答
0
只需删除以下内容:
pagingEnabled = { true }
这将解决您的示例。
于 2020-05-29T15:10:32.943 回答
0
我有同样的问题,但我的情况有点不同。就我而言,我从 a WIDTH
of开始0
并等待onLayout
事件回调设置正确的宽度。因此,在初始渲染时,无论值initialScrollIndex
是多少,它都不能以零宽度滚动。使用Dimensions
设置初始宽度为我修复了它。
于 2017-12-28T22:33:55.470 回答