我创建了一个屏幕,其中显示包含FlatList的组件。出于某种原因,我无法滚动列表。谁能发现我的错误并指出我正确的方向?
我的屏幕文件中的渲染功能和样式:
render() {
return (
<View style={styles.container}>
<SearchBar />
<ActivityList style={styles.list} data={this.state.data} />
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
overflow: 'hidden',
backgroundColor: '#fff',
alignItems: 'center',
justifyContent: 'flex-start',
},
list: {
flex: 1,
overflow: 'hidden',
},
});
从我的listitem组件渲染函数和样式:
export default class CardItem extends React.PureComponent {
render() {
return (
<View style={styles.cardview}>
<View style={styles.imagecontainer}>
<Image
resizeMode="cover"
style={styles.cardimage}
source={{
uri: this.props.image,
}}
/>
</View>
<View style={styles.cardinfo}>
<Text style={styles.cardtitle}>{this.props.title}</Text>
<View style={styles.cardtext}>
<Text style={styles.textdate}>{this.props.date}</Text>
<Text style={styles.texthour}>{this.props.hour}</Text>
</View>
</View>
</View>
);
}
}
const styles = StyleSheet.create({
cardview: {
flex: 1,
justifyContent: 'flex-start',
backgroundColor: 'white',
elevation: 3,
maxHeight: 200,
width: Dimensions.get('window').width - 20,
margin: 1,
marginTop: 10,
borderRadius: 4,
},
imagecontainer: {
flex: 7,
height: 140,
borderRadius: 4,
},
cardimage: {
flex: 1,
opacity: 0.8,
height: 140,
borderTopLeftRadius: 4,
borderTopRightRadius: 4,
},
cardinfo: {
flex: 2,
flexDirection: 'row',
justifyContent: 'space-between',
alignItems: 'center',
padding: 10,
},
cardtitle: {
flex: 1,
fontSize: 16,
fontWeight: 'bold',
},
cardtext: {
flex: 1,
justifyContent: 'center',
alignItems: 'flex-end',
},
textdate: {
color: '#5e5e71',
},
texthour: {
color: '#5e5e71',
},
});
从我的列表组件中渲染函数和样式:
export default class ActivityList extends React.Component {
_renderCardItem = ({ item }) => (
<CardItem
image={item.image}
title={item.title}
date={item.date}
hour={item.hour}
/>
);
_keyExtractor = item => item.id;
render() {
return (
<FlatList
data={this.props.data}
renderItem={this._renderCardItem}
contentContainerStyle={styles.cardcontainer}
keyExtractor={this._keyExtractor}
/>
);
}
}
const styles = StyleSheet.create({
cardcontainer: {
flex: 1,
overflow: 'hidden',
backgroundColor: 'white',
alignItems: 'center',
width: Dimensions.get('window').width,
borderWidth: 0,
},
});
我的数据项具有唯一的ID,标题,日期,小时。
阅读所有可用的指南和文档,但未找到解决方案。
答案 0 :(得分:17)
取出flex: 1
中的styles.cardcontainer
,让您滚动。 FlatList / ScrollView contentContainerStyle
道具包装所有子组件 - 内部&#34;内部&#34; FlatList,如果你愿意 - 并且永远不应该有一个定义的高度或弹性值。如果您需要为FlatList本身设置flex: 1
,请改用style={{flex: 1}}
。干杯!
答案 1 :(得分:2)
当我在聊天应用程序中添加图像工具时,我也遇到了这个问题,并且找到了一个技巧解决方案。
只需添加TouchableWithoutFeedback即可覆盖平面列表中的每个元素。奇怪,但是有效。
_renderCardItem = ({ item }) => (
<TouchableWithoutFeedback onPress={()=>{}}>
<CardItem
image={item.image}
title={item.title}
date={item.date}
hour={item.hour}
/>
</TouchableWithoutFeedback>
);
答案 2 :(得分:1)
对我来说,问题是平板清单项目中的图像大小。 我只是按百分比设置高度,这是一个错误。
这里有一些提示。
1:不要为FlatList contentContainer设置固定高度
2:Flatlist中的子项不能具有百分比高度,例如:50%,否则将占用列表的一半,并且不允许其他子项进行渲染
3:如果您想要固定大小的FlatList,请将其高度放在样式属性中,而不是contentContainerStyle
答案 3 :(得分:0)
对于其他遇到此问题的人:我的FlatList位于一个TouchableWithoutFeedback内部。我将其更改为“视图”,并能够再次滚动。
答案 4 :(得分:0)
只需执行以下步骤即可获取FlatList滚动。
<View style={{flex:1}}>
<FlatList
data={this.state.data}
renderItem={({item}) => this.renderData(item)}
keyExtractor={item => item._id}
contentContainerStyle={{
flexGrow: 1,
}}
/>
</View>
答案 5 :(得分:0)
对我来说,我的列表顶部有一个绝对定位的透明视图!
不管什么原因,它只影响了我的安卓版本。
我认为是绝对位置,所以我看的时候检查员没有看到。
答案 6 :(得分:-3)
我尝试提出您的所有建议,但解决了仅取消“ npm run android”并再次运行的问题