在 FlatList 中取 100% 宽度 - React Native
Take 100% width in FlatList - React Native
我有一个名为“AddWater”的组件,我想在其中显示一个包含两列的 FlatList。一切正常,但 FlatList 中的组件没有占用整个 space。帮我解决这个问题。
我希望两个组件占 100% 宽度,这意味着一个组件占 50% space。
我正在为 Card 组件使用 react-native-paper 并在 expo web 中测试它
检查下面的代码。
export default function AddWater() {
return (
<View style={styles.container}>
<FlatList
numColumns={2}
data={sizes}
renderItem={({item}) => (
<Card style={styles.card}>
<Card.Content>
<Title>{item.size}</Title>
</Card.Content>
</Card>)
}>
</FlatList>
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
},
card: {
flex: 1,
},
});
使用 onLayout
属性获取父组件的宽度并将该宽度用于 Card
元素。
这是完整的工作示例:Expo Snack
import React, { useState } from 'react';
import { Text, View, StyleSheet, FlatList, Image } from 'react-native';
import Constants from 'expo-constants';
// You can import from local files
import AssetExample from './components/AssetExample';
// or any pure javascript modules available in npm
import { Card, Title } from 'react-native-paper';
const data = ['one', 'two', 'three', 'four'];
export default function App() {
const [layout, setLayout] = useState({
width: 0,
height: 0,
});
return (
<View
style={styles.container}
onLayout={(event) => setLayout(event.nativeEvent.layout)}>
<FlatList
data={data}
renderItem={({ item }) => (
<Card
style={{
width: layout.width,
backgroundColor: 'pink',
marginTop: 20,
}}>
<Card.Content>
<Title>{item}</Title>
</Card.Content>
</Card>
)}></FlatList>
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
marginTop: 22,
justifyContent: 'center',
backgroundColor: '#ecf0f1',
},
});
设置 numColumns={1} 而不是 2
我有一个名为“AddWater”的组件,我想在其中显示一个包含两列的 FlatList。一切正常,但 FlatList 中的组件没有占用整个 space。帮我解决这个问题。
我希望两个组件占 100% 宽度,这意味着一个组件占 50% space。
我正在为 Card 组件使用 react-native-paper 并在 expo web 中测试它
检查下面的代码。
export default function AddWater() {
return (
<View style={styles.container}>
<FlatList
numColumns={2}
data={sizes}
renderItem={({item}) => (
<Card style={styles.card}>
<Card.Content>
<Title>{item.size}</Title>
</Card.Content>
</Card>)
}>
</FlatList>
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
},
card: {
flex: 1,
},
});
使用 onLayout
属性获取父组件的宽度并将该宽度用于 Card
元素。
这是完整的工作示例:Expo Snack
import React, { useState } from 'react';
import { Text, View, StyleSheet, FlatList, Image } from 'react-native';
import Constants from 'expo-constants';
// You can import from local files
import AssetExample from './components/AssetExample';
// or any pure javascript modules available in npm
import { Card, Title } from 'react-native-paper';
const data = ['one', 'two', 'three', 'four'];
export default function App() {
const [layout, setLayout] = useState({
width: 0,
height: 0,
});
return (
<View
style={styles.container}
onLayout={(event) => setLayout(event.nativeEvent.layout)}>
<FlatList
data={data}
renderItem={({ item }) => (
<Card
style={{
width: layout.width,
backgroundColor: 'pink',
marginTop: 20,
}}>
<Card.Content>
<Title>{item}</Title>
</Card.Content>
</Card>
)}></FlatList>
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
marginTop: 22,
justifyContent: 'center',
backgroundColor: '#ecf0f1',
},
});
设置 numColumns={1} 而不是 2