React native -垂直和水平对齐图像

zd287kbt  于 2023-06-30  发布在  React
关注(0)|答案(1)|浏览(132)

在我的react原生应用程序中,我创建了一个屏幕来显示某个列表,并在平面列表中配置了一个“renderEmpty”方法,以便在列表不为空时显示一个图像来代替列表。我能够水平对齐图像,但不能垂直对齐。我做错了什么?我希望你的帮助,以实现这一垂直对齐
按照下面的代码:

import { 
    StyleSheet,
    SafeAreaView,
    FlatList,
    TouchableOpacity,
    View,
    Text,
    Image
} from 'react-native';

export default function App() {

    const list = [];

    const renderEmpty = () => (
        <View style={styles.emptyListContainer}>
            <Image
                source={require('./assets/empty-list.png')}
                style={styles.emptyListImage}
            />
            <Text style={styles.emptyListText}>No content</Text>
        </View>
    );    

    const renderItem = ({ item, index }) => {
        return (
            <View style={styles.listItem}>
                <View style={styles.itemContainer}>
                    <TouchableOpacity>
                        <Text style={styles.item}>{item.nome}</Text>
                    </TouchableOpacity>
                </View>
            </View>
        );
    }    

  return (
    <SafeAreaView style={styles.container}>
      <View style={{flex: 1}}>
        <FlatList
          style={{flex:1}}
          keyExtractor={item => item.id}
          data={list}
          renderItem={({ item }) => renderItem({item})}
          ListEmptyComponent={renderEmpty}
          onEndReachedThreshold={0.2}
        />
      </View>
    </SafeAreaView>
  );
}

const styles = StyleSheet.create({
    container: {
        flex: 1,
        marginTop:15,
    },
    listItem:{
        elevation: 5,
        width:"95%",
        margin: 3,
        marginBottom: 7,
        flex: 1,
        alignSelf:"center",
        flexDirection:"row",
        borderRadius:5
    },
    itemContainer: {
        flex: 1,
        padding: 20,
        flexDirection: "row",
        justifyContent: "space-between",
        alignItems: "center"
    },
    item: {
        color: 'black',
        fontWeight: "800", 
        fontSize: 24,
        fontFamily: 'helvetica'
    },    
    emptyListContainer: {
        flex: 1,
        alignItems: 'center',
        justifyContent: 'center'
    },
    emptyListImage: {
        width: 200,
        height: 200,
    },
    emptyListText: {
        fontSize: 18,
        fontWeight: 'bold',
        marginTop: 20,
    }       
});

代码可在https://snack.expo.dev/d7HXkFB3c上获得
谢谢!

rryofs0p

rryofs0p1#

您的FlatList需要以下 prop

<FlatList
  style={{flex:1}}
  contentContainerStyle={{ flexGrow: 1 }} // new! can also be flex: 1 in your case
  // but flexGrow also takes care of the "list snaps back on scroll" issue
  ...

FlatLists建立在ScrollViews之上。ScrollViews包含两个视图:一个外部视图和一个内部视图,内部视图保存内容(contentContainer)。style属性样式化外部视图; contentContainerStyle设置内部视图的样式。你的内心世界并不知道如何填补外在世界的空间。
您可以在这里阅读更多关于contentContainerStyle的信息:https://reactnative.dev/docs/scrollview#contentcontainerstyle

相关问题