Réagir Natif FlatList avec des colonnes, le Dernier point de la largeur de
Je suis en utilisant un FlatList pour afficher une liste d'éléments de deux colonnes
<FlatList style={{margin:5}}
data={this.state.items}
numColumns={2}
keyExtractor={(item, index) => item.id }
renderItem={(item) => <Card image={item.item.gallery_image_url} text={item.item.name}/> }
/>
La carte de composant est juste un point de vue avec certains styles:
<View style={{ flex: 1, margin: 5, backgroundColor: '#ddd', height: 130}} ></View>
Il fonctionne très bien, mais si le nombre d'éléments est bizarre, la dernière ligne ne contient qu'un seul élément, et que le point s'étend sur toute la largeur de l'écran.
Comment puis-je régler l'élément de la même largeur que les autres?
Vous devez vous connecter pour publier un commentaire.
Il ya quelques choses que vous pouvez essayer ici.
A) définition d'un pré-défini la largeur de la carte ( Peut-être égale à la hauteur que vous avez mis? ). Ensuite, vous pouvez utiliser
alignItems
afin d'avoir la carte placée dans le milieu ou sur la gauche savez pas à qui vous avez voulu ici.B) S'il y a un nombre pair de cartes, vous pouvez ajouter une Vue vide à la fin afin de remplir cet espace. Je trouve cette méthode assez maladroit, mais utile lorsque vous essayez de laisser de l'espace pour les éléments futurs.
C), il suffit d'utiliser
alignItems: 'space-between
, j'aime l'utiliser pour le centre d'éléments, mais vous pouvez définir la largeur, ou utiliser quelque chose commeflex:0.5
Je suggère à la recherche de plus en flexbox pour vous aider avec cela, car il est difficile de dire le contexte de cette situation. Je suis en supposant que les méthodes ci-dessus aidera, mais si pas, voici quelques liens pour vous de regarder au -
Premier lien
Deuxième lien
Troisième lienLien CasséEspère que cette aide. Si vous avez besoin d'autres précisions - il suffit de demander
pour votre cas d'utilisation flex: 1/2
donc: Votre élément devrait avoir flex de 1/(nombre de colonnes), si vous avez 3 colonnes de votre article doit avoir flex:1/3
Vous pouvez essayer d'obtenir la largeur actuelle de l'appareil par l'intermédiaire de Dimensions, de faire quelques calculs basés sur le nombre de colonnes que vous souhaitez afficher, moins large de la marge et de le définir comme minWidth et maxWidth.
Par exemple:
flex:1
dans le cas impair de colonnesvérifier si le nombre d'éléments est impair, si le nombre est impair, donner un style particulier pour le dernier élément.
par exemple)
La raison pour laquelle il est votre Carte de style
flex: 1
, donc il va essayer de développer tout l'espace qui reste.Vous pouvez y remédier en ajouter
maxWidth: '50%'
à votre style de CarteC'est la façon la plus propre au style d'une
FlatList
avec des colonnes et espacés de façon régulière: