- Установите
flexWrap
на wrap
в стиле контейнера - Установите
width
каждой карты на (screen width - card margin * 3) / 2
Это пример моего функционального компонента
Но использование FlatList и установка numColumns
на 2 более полезно FlatList numColumn
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>
);
Вы можете видеть flexWrap
документы