我有一个数据列表,我想放在FlatList(即ScrollView)中,每当我尝试向下滚动查看列表的更多内容时,ScrollView就会反弹到列表的顶部,所以我不能永远看到列表的底部。
我正在使用Expo,奇怪的是,如果我只是创建一个新项目或将一些代码复制/粘贴到Snack中,那么滚动工作就可以了。只有在我当前的项目中,我无法获得滚动列表。我甚至已经进入main.js
文件,只是将我的示例代码粘贴在那里,问题仍然存在。
我的示例代码位于此处:https://snack.expo.io/ryDPtO5-b 我已经将这些确切的代码粘贴到我的项目中,但它没有按预期工作。
版本: RN 0.44 / Expo SDK 17.0.0 / 反应:16.0.0-alpha.6
我的项目的实际用例涉及将FlatList组件放在屏幕的底部三分之一处以显示作业列表。这是我发现错误的地方,当我开始尝试调试问题时。在我的项目中,我的父级View
的样式为{flex: 1
,其子级为List
,其中包含FlatList
...来自{List
react-native-elements
1}}
修改
以下是我实际尝试使用的代码:
<View style={styles.container}>
<View style={containerStyles.headerContainerStyle}>
<Text style={[textStyles.h2, { textAlign: "center" }]}>
Territory: {this.props.currentTerritory}
</Text>
</View>
<View style={styles.mapContainer}>
<MapView
provider="google"
onRegionChangeComplete={this.onRegionChangeComplete}
region={this.state.region}
style={{ flex: 1 }}
>
{this.renderMapMarkers()}
</MapView>
</View>
<Badge containerStyle={styles.badgeStyle}>
<Text>Orders Remaining: {this.props.jobsList.length}</Text>
</Badge>
<List containerStyle={{ flex: 1 }}>
<FlatList
data={this.props.jobsList}
keyExtractor={item => item.id}
renderItem={this.renderJobs}
removeClippedSubviews={false}
/>
</List>
</View>;
我所有的风格
const styles = StyleSheet.create({
container: {
flex: 1,
},
mapContainer: {
height: 300,
},
badgeStyle: {
backgroundColor: 'green',
alignSelf: 'center',
marginTop: 15,
width: 300,
height: 35,
},
});
最后,我的renderItem函数:
renderJobs = ({ item }) => {
const { fullAddress, pickupTime } = item;
return (
<ListItem
containerStyle={
item.status === "active" && { backgroundColor: "#7fbf7f" }
}
title={fullAddress}
titleStyle={{ fontSize: 14 }}
subtitle={pickupTime}
subtitleStyle={{ fontSize: 12, color: "black" }}
onPress={() =>
this.props.navigation.navigate("jobActions", { job: item })
}
/>
);
};
答案 0 :(得分:4)
我能够解决这个问题。
解决方案是在renderRow返回组件<View style={{flex:1}}>
后使用flatlist组件<View style={{flex:1}}>
答案 1 :(得分:2)
我很困惑 - 您使用的是ScrollView
还是FlatList
- 这两个元素具有完全不同的生命周期事件(ScrollView
要求您定义各个行的呈现方式及其键,而List
期望子组件与组件内联呈现。)
无论如何,我认为问题出在你的结构中,听起来{flex: 1}
元素也需要一个height属性(List
),因为绝对父级正在填充它的空间,但npm cache
组件没有预先定义的高度。
答案 2 :(得分:1)
通过向根
添加flex:1解决了这个问题答案 3 :(得分:0)
所以在今天再调试一下之后我最终创建了一个全新的Expo项目,并将我的所有源代码复制/粘贴到新项目中,将我的Github项目名称更改为新名称,并设置远程源在我的新本地项目中,我的github repo(我改名的那个)。
出于某种原因,世博项目似乎存在问题。几乎看起来项目的实际NAME
导致了问题,因为我试图将新项目的名称更改为原始项目的名称,但它没有起作用。它只适用于做一个全新的项目,但使用完全相同的源代码。