React native 如何使用flex每行放置2张卡
我将提供我正在尝试执行的操作的图像: 一个是我想要的,一个是显示问题的,最后我将显示代码 第一张图片(我希望它是什么样子): 第二张图片(当我有第三张卡时的样子) 代码如下:React native 如何使用flex每行放置2张卡,react-native,flexbox,React Native,Flexbox,我将提供我正在尝试执行的操作的图像: 一个是我想要的,一个是显示问题的,最后我将显示代码 第一张图片(我希望它是什么样子): 第二张图片(当我有第三张卡时的样子) 代码如下: <ScrollView> <View style={{ padding: 10 }}> <View style={{ paddingTop: '5%' }}></View> <View style={{ flexDirecti
<ScrollView>
<View style={{ padding: 10 }}>
<View style={{ paddingTop: '5%' }}></View>
<View style={{ flexDirection: 'row', justifyContent: 'space-between' }}>
{this.state.subjects.map(subject => {
return (
<View key={subject.id}>
<TouchableOpacity onPress={() => this.props.navigation.navigate('ViewSubject', { id: subject.id })}>
<ImagedCarouselCard
width={180}
height={180}
text={subject.name}
shadowColor="#051934"
source={{
uri: "http://site.test/" + subject.icon,
}}
/>
</TouchableOpacity>
</View>
)
})}
</View>
<View style={{ paddingTop: '2%' }}></View>
</View>
</ScrollView>
{this.state.subjects.map(subject=>{
返回(
this.props.navigation.navigate('ViewSubject',{id:subject.id})}>
)
})}
flexWrap
设置为wrap
宽度设置为(屏幕宽度-卡边距*3)/2
numColumns
设置为2更有用
const主题=[
{id:1,名称:'Card 1'},
{id:2,名称:'Card 2'},
{id:3,姓名:'Card 3'},
{id:4,名字:'Card 4'},
];
常数cardGap=16;
const cardWidth=(Dimensions.get('window').width-cardGap*3)/2;
返回(
{subject.map((subject,i)=>{
返回(
{subject.name}
);
})}
);
您可以看到flexWrap
是的,刚刚添加了
flexWrap
,但显然第三张卡没有碰到它上面的那张卡。也许这就是为什么您添加了屏幕宽度-卡片边距*3
?但是,在实际代码中会是怎样的呢?我有点困惑。谢谢你的回复@丹尼洛文我把实际的片段again@DanielLogvin等等,我会很快把我的例子和cardGap
的定义放在哪里?我感谢你的帮助:)太棒了!我真的很感激,非常感谢!
const subjects = [
{ id: 1, name: 'Card 1' },
{ id: 2, name: 'Card 2' },
{ id: 3, name: 'Card 3' },
{ id: 4, name: 'Card 4' },
];
const cardGap = 16;
const cardWidth = (Dimensions.get('window').width - cardGap * 3) / 2;
return (
<ScrollView>
<View
style={{
flexDirection: 'row',
flexWrap: 'wrap',
justifyContent: 'center',
}}
>
{subjects.map((subject, i) => {
return (
<View
key={subject.id}
style={{
marginTop: cardGap,
marginLeft: i % 2 !== 0 ? cardGap : 0,
width: cardWidth,
height: 180,
backgroundColor: 'white',
borderRadius: 16,
shadowOpacity: 0.2,
justifyContent: 'center',
alignItems: 'center',
}}
>
<TouchableOpacity>
<Text>{subject.name}</Text>
</TouchableOpacity>
</View>
);
})}
</View>
</ScrollView>
);