Fiche 01.05 — ScrollView, List et LazyVStack
Objectif
Comprendre comment afficher du contenu qui dépasse la taille de l’écran avec ScrollView, List et LazyVStack, et savoir quand utiliser chaque solution.
1. L’idée à comprendre
Sur iPhone, l’écran est limité.
Dès que ton contenu devient trop grand, il faut permettre à l’utilisateur de scroller.
SwiftUI propose plusieurs solutions :
ScrollViewpour créer une zone scrollable libre ;Listpour afficher une liste native iOS ;LazyVStackpour afficher beaucoup d’éléments verticalement dans unScrollView;LazyHStackpour afficher beaucoup d’éléments horizontalement.
Résumé rapide :
2. ScrollView
ScrollView permet de rendre une zone scrollable.
Exemple simple :
Ici :
ScrollViewrend le contenu scrollable ;VStackempile les éléments ;ForEachcrée plusieurs lignes.
3. Scroll horizontal
Tu peux aussi faire un scroll horizontal.
C’est utile pour :
- carrousels ;
- catégories ;
- stories ;
- filtres horizontaux ;
- cartes à swiper horizontalement.
4. List
List sert à afficher une liste native iOS.
Exemple simple :
List est pratique parce qu’elle gère automatiquement beaucoup de comportements natifs :
- scrolling ;
- séparation entre lignes ;
- style iOS ;
- sections ;
- swipe actions ;
- suppression ;
- navigation vers un détail.
5. Cellule custom dans une List
Tu peux mettre une vue personnalisée dans une List.
À retenir :
6. Identifiable
Quand tu affiches une collection dans une List ou un ForEach, SwiftUI doit identifier chaque élément.
Le plus propre est souvent de rendre ton modèle conforme à Identifiable.
Puis :
Comme Article possède un id, SwiftUI sait identifier chaque ligne.
Si tu n’as pas de modèle Identifiable, tu peux donner un id manuellement :
Mais id: \.self est surtout adapté aux valeurs simples comme des String ou des Int.
Pour des objets réels, préfère un vrai id stable.
7. LazyVStack
LazyVStack ressemble à VStack, mais elle crée les vues progressivement quand elles deviennent nécessaires.
Elle est souvent utilisée dans un ScrollView.
LazyVStack est utile quand tu as beaucoup d’éléments ou un design très custom.
8. VStack vs LazyVStack
VStack crée tous ses enfants directement.
LazyVStack crée les éléments au fur et à mesure.
Exemple :
Mais pour une grande liste :
9. LazyHStack
LazyHStack est la version horizontale de LazyVStack.
C’est utile pour des carrousels avec beaucoup d’éléments.
10. List avec sections
List permet aussi de créer des sections.
C’est très utile pour des écrans comme :
- réglages ;
- profil ;
- paramètres ;
- formulaires organisés ;
- menus internes.
11. Swipe actions dans une List
List permet facilement d’ajouter des actions au swipe.
C’est un avantage de List par rapport à un ScrollView custom.
12. Refresh avec refreshable
Tu peux ajouter un pull-to-refresh avec .refreshable.
refreshable est très utile pour :
- feeds ;
- listes d’articles ;
- messages ;
- données venant d’une API.
13. Quand utiliser ScrollView, List ou LazyVStack ?
Utilise ScrollView quand :
- tu as un écran libre avec plusieurs blocs ;
- tu ne veux pas le style natif d’une liste ;
- tu veux scroller une page complète ;
- tu veux mélanger plusieurs sections custom.
Exemple :
Utilise List quand :
- tu veux une liste native iOS ;
- tu as des lignes classiques ;
- tu veux des sections ;
- tu veux des swipe actions ;
- tu veux un écran de réglages ;
- tu veux une navigation liste → détail simple.
Exemple :
Utilise ScrollView + LazyVStack quand :
- tu veux un feed très custom ;
- tu veux contrôler complètement le design ;
- tu as beaucoup d’éléments ;
Listte limite visuellement ;- tu veux éviter le style natif des cellules.
Exemple :
14. Exemple réaliste : feed custom
Ici, ScrollView + LazyVStack donne plus de contrôle visuel qu’une List.
15. Points à connaître
Ne mets pas une grande VStack dans un ScrollView si tu as énormément d’éléments
Pour une petite page, c’est correct :
Pour une grande liste, préfère :
List est pratique mais parfois difficile à personnaliser
List donne beaucoup de comportements natifs gratuitement.
Mais si tu veux un design très précis, tu seras parfois plus libre avec :
Évite les ScrollView imbriquées sans raison
Exemple à éviter si possible :
Des scrolls dans des scrolls peuvent créer des comportements bizarres.
Un scroll horizontal dans un scroll vertical est courant, mais deux scrolls verticaux imbriqués sont souvent une mauvaise idée.
Résumé
À retenir :
ScrollViewrend un contenu scrollable ;Listaffiche une liste native iOS ;LazyVStackcrée les éléments progressivement dans un scroll vertical ;LazyHStackfait pareil horizontalement ;Listest pratique pour les réglages, sections et swipe actions ;ScrollView + LazyVStackest souvent mieux pour un feed très custom ;- les éléments d’une
Listou d’unForEachdoivent être identifiables ; - pour des modèles réels, utilise souvent
Identifiableavec unidstable.