こんにちは、React Nativeの新人です。
FlatListと呼ばれるreactネイティブコンポーネントを使用して、スペースbeetweenで2列のレイアウトを作成しようとしています。
これが私のビューコードです:
<View style={styles.container}>
<FlatList
data={db}
keyExtractor={ (item, index) => item.id }
numColumns={2}
renderItem={
({item}) => (
<TouchableWithoutFeedback onPress ={() => showItemDetails(item.id)}>
<View style={styles.listItem}>
<Text style={styles.title}>{item.name}</Text>
<Image
style={styles.image}
source={{uri: item.image}}
/>
<Text style={styles.price}>{item.price} zł</Text>
</View>
</TouchableWithoutFeedback>
)
}
/>
</View>
ここにスタイルがあります:
container: {
flex: 1,
flexDirection: 'row',
justifyContent: 'space-between',
padding: 10,
marginBottom: 40
},
listItem: {
maxWidth: Dimensions.get('window').width /2,
flex:0.5,
backgroundColor: '#fff',
marginBottom: 10,
borderRadius: 4,
},
結果は2列ですが、間にスペースはありません。この問題の解決にご協力いただけますか?
次のように、styles.container
をFlatlistのcontentContainerStyle
プロパティに渡す必要があります。
<FlatList
data={db}
keyExtractor={ (item, index) => item.id }
contentContainerStyle={styles.container}
numColumns={2}
renderItem={
({item}) => (
<TouchableWithoutFeedback onPress ={() => showItemDetails(item.id)}>
<View style={styles.listItem}>
<Text style={styles.title}>{item.name}</Text>
<Image
style={styles.image}
source={{uri: item.image}}
/>
<Text style={styles.price}>{item.price} zł</Text>
</View>
</TouchableWithoutFeedback>
)
}
/>
リスト項目のスタイルにマージンを追加するだけです。
listItem: {
margin: 10,
}
ItemSeparatorComponent を使用して、アイテム間のコンポーネントをレンダリングします
ドキュメント:各アイテムの間にレンダリングされますが、上部または下部にはレンダリングされません。
<FlatList
data={arrayOfData}
horizontal
ItemSeparatorComponent={
() => <View style={{ width: 16, backgroundColor: 'pink' }}/>
}
renderItem={({ item }) => (
<ItemView product={item} />
)}
/>
リストが縦型で、columnCount
が2である場合
例に基づいて、margin
をリストアイテムのスタイルに追加できるように見えます。
listItem: {
maxWidth: Dimensions.get('window').width /2,
flex:0.5,
backgroundColor: '#fff',
marginBottom: 10,
borderRadius: 4,
margin: 18,
},
これは次のことと同じであることを覚えておいてください:
listItem: {
maxWidth: Dimensions.get('window').width /2,
flex:0.5,
backgroundColor: '#fff',
marginBottom: 10,
borderRadius: 4,
marginTop: 18,
marginBottom: 18,
marginRight: 18,
marginLeft: 18,
},
あなたの好みや仕様に合わせてカスタマイズしてください:)
このライブラリは使用していませんが、padding: 10
to listItemスタイルが役立つはずです。