Привет всем, я получаю данные из json api и использую плоский список для рендеринга элементов. Я использую свойство numColumns для отображения 3 элементов в строке
но предположим, что у меня есть 7 или 8 предметов
у меня проблемы с рендерингом. макет, который я хочу отобразить, выглядит следующим образом
X X X
X X X
X X
но я получаю следующее: макет
Вот мой код:
_renderItem = ({ item, index }) => (
<View style = {categorystyles.Category} key = {index}>
<TouchableOpacity activeOpacity = {.5}
onPress = {() => this.props.navigation.navigate('ListingPerCategory', { catid: item.id })}>
{item.category_app_icon ? <Image style = {categorystyles.CategoryImg}
source = {{ uri: `${item.category_app_icon}` }} /> :
<Image style = {categorystyles.CategoryImg}
source = {require('../assets/coffeecup.png')} />}
</TouchableOpacity>
<Text style = {{ marginTop: 5 }}>{escape(item.name).replace('%20', ' ').replace('%26amp%3B%20', ' ')}</Text>
</View>
)
render(){
return(
<FlatList
horizontal = {false}
data = {this.state.categories}
keyExtractor = {(item, index) => item.id}
numColumns = {3}
renderItem = {this._renderItem}
/>
)
}
const styles = StyleSheet.create({
Category: {
flex:1,
justifyContent: 'center',
alignItems:'center',
margin:5
},
CategoryImg: {
resizeMode: 'contain',
width: 50,
height: 50
}
})





Flatlist лениво загружает элементы - это означает, что они отображаются при прокрутке. Это поведение плоского списка из-за производительности. Если вы хотите визуализировать все вместе, вы должны вместо этого использовать ScrollView
Поскольку вы используете flex: 1 и alignItems: center, ваш макет будет выглядеть так: 
Следовательно, items внутри него будет выровнен по центру вертикально и по горизонтали на основе элементов макет.
Вместо этого вам нужно проверить width устройства и добавить макет на его основе.
В твоих стилях
Category: {
flex:1,
maxWidth: Dimensions.get('window').width / 3 - 10, // Width / 3 - (marginLeft and marginRight for the components)
justifyContent: 'center',
alignItems:'center',
margin:5
},
если вы хотите, чтобы это отображалось
X X X
X X X
X X
нет
X X X
X X X
X X
просто измените стиль:
const styles = StyleSheet.create({
Category: {
flex:1,
justifyContent: 'flex-start',
alignItems:'center',
margin:5
},
CategoryImg: {
resizeMode: 'contain',
width: 50,
height: 50
}
})
это из-за центра justifyContent или alignItems. удалите их по одному и проверьте. проблема должна быть решена. если не дайте мне знать