我使用的是React-Native版本0.43.0,它不支持FlatList的ListEmptyComponent . 因此,当列表为空时,我使用ListHeaderComponent渲染视图,
import React, { Component } from 'react';
import { Text, View, StyleSheet,FlatList } from 'react-native';
class App extends Component {
constructor(props) {
super(props);
this.state = {
listData: []
}
}
render() {
return (
<View style={styles.container}>
<FlatList
renderItem={() => null}
data={this.state.listData}
ListHeaderComponent={() => (!this.state.listData.length?
<Text style={styles.emptyMessageStyle}>The list is empty</Text>
: null)
}
/>
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex:1
},
emptyMessageStyle: {
textAlign: 'center',
//My current hack to center it vertically
//Which does not work as expected
marginTop: '50%',
}
});
正如您从图像中看到的那样,文本不是垂直居中的
知道如何在FlatList中垂直居中吗?
我已经尝试过应用justifyContent,alignItems等但没有用 .
这是snack.expo的链接 - https://snack.expo.io/S16dDifZf
4 回答
他们在这个prhttps://github.com/facebook/react-native/pull/18206中修复了ListEmptyComponent . 但他们将在0.56发货 .
您可以向FlatList添加样式 .
当列表不为空时,这将使列表中的项目居中 . 如果您不喜欢非空样式,则可能必须应用其他样式(当列表不为空时) .
Link to snack.expo
另一个选项 - 不更改FlatList样式 - 根据
this.state.listData.length
有条件地渲染FlatListThis is the snack.expo
作为临时解决方法,您可以有条件地将样式设置为contentContainer,以便仅像这样设置空集
和这样的风格
然后在2-3周内我们可以更新到0.56并删除变通方法
希望对你有帮助
将您的UI放在renderEmptyContainer()方法中,当您的列表为空时,将显示空容器