Fiche 03.10 — Grilles avec LazyVGrid et LazyHGrid
Objectif
Comprendre comment afficher du contenu en grille dans SwiftUI avec LazyVGrid (grille verticale) et LazyHGrid (grille horizontale), et savoir paramétrer le nombre de colonnes, l’espacement et le comportement adaptatif.
1. L’idée à comprendre
List affiche du contenu en ligne unique. Quand tu veux plusieurs colonnes (photos, produits, contacts), tu utilises une grille.
SwiftUI propose deux conteneurs :
LazyVGrid→ grille verticale (les lignes s’empilent du haut vers le bas)LazyHGrid→ grille horizontale (les colonnes s’empilent de gauche à droite)
Le mot Lazy signifie que les éléments ne sont créés qu’au moment où ils deviennent visibles. C’est essentiel pour la performance avec beaucoup d’éléments.
Une grille doit être placée dans un ScrollView pour permettre le défilement.
2. GridItem : la brique de configuration
Une grille se définit par un tableau de GridItem. Chaque GridItem représente une colonne (pour LazyVGrid) ou une ligne (pour LazyHGrid).
Il existe trois modes :
3. LazyVGrid simple avec colonnes fixes
Ici on a toujours 3 colonnes, peu importe la taille de l’écran.
4. LazyVGrid adaptative (recommandé en pratique)
.adaptive est le mode le plus utile : SwiftUI choisit lui-même combien de colonnes afficher selon la largeur disponible.
Sur un iPhone, tu auras peut-être 3 colonnes. Sur un iPad, 6 ou 8. C’est automatique.
5. Mélanger les types de colonnes
Tu peux mélanger fixe et flexible pour des layouts plus précis.
Utile pour une grille type "icône / texte / bouton".
6. LazyHGrid (grille horizontale)
Mêmes principes mais avec des lignes au lieu de colonnes, et un ScrollView horizontal.
Cas typiques : carrousel de catégories, suggestions horizontales, stories.
7. Grille avec sections
LazyVGrid accepte des Section comme une List.
pinnedViews: [.sectionHeaders] permet de garder le header collé en haut pendant le scroll.
8. Exemple concret : grille de produits
Cette grille s’adapte automatiquement à la taille de l’écran (iPhone, iPad, paysage).
9. Performance : Lazy vs non-Lazy
Il existe aussi Grid (sans Lazy) depuis iOS 16, mais il charge tout en une fois.
Grid→ pour quelques éléments fixes (formulaires, tableaux courts)LazyVGrid/LazyHGrid→ pour des listes longues qui défilent
Pour une grille de photos d’une galerie, utilise toujours la version Lazy.
10. Points à connaître
Toujours dans un ScrollView
Sans ScrollView, la grille ne défile pas et peut être tronquée.
Préfère .adaptive pour de vraies apps
.adaptive(minimum: ...) gère iPhone, iPad et orientation gratuitement. Tu n’as pas besoin d’écrire de code spécifique par appareil.
Le spacing existe à deux niveaux
spacingdansGridItem→ espace entre colonnesspacingduLazyVGrid→ espace entre lignes
Identifiable ou id explicite
ForEach a besoin d’une identité stable. Utilise Identifiable sur ton modèle ou id: \.self pour les types simples comme String.
Résumé
À retenir :
LazyVGrid= grille verticale,LazyHGrid= grille horizontale ;- une grille doit être placée dans un
ScrollView; - chaque colonne ou ligne est définie par un
GridItem; .fixed= largeur fixe,.flexible= partage l’espace,.adaptive= nombre de colonnes auto ;.adaptiveest le plus utile pour gérer iPhone et iPad sans code spécifique ;- les sections fonctionnent comme dans
List, avecpinnedViewspour coller les headers ; Lazycharge les éléments à la volée → essentiel pour les longues listes ;- pour de petites grilles fixes,
Grid(iOS 16+) peut suffire.