Fiche 01.04 — Layout de base : VStack, HStack, ZStack, Spacer, padding et frame
Objectif
Comprendre comment organiser les éléments à l’écran avec les containers SwiftUI les plus importants : VStack, HStack, ZStack, Spacer, padding et frame.
1. L’idée à comprendre
En SwiftUI, tu places les éléments en les empilant dans des containers.
Les trois containers de base sont :
VStack: empile les vues verticalement ;HStack: empile les vues horizontalement ;ZStack: empile les vues les unes par-dessus les autres.
Ensuite, tu ajustes l’espace avec :
Spacer();.padding();.frame(...).
2. VStack
VStack place les vues les unes sous les autres.
Résultat logique :
Tu peux régler l’espacement :
Tu peux aussi régler l’alignement horizontal :
Ici, les textes sont alignés à gauche.
3. HStack
HStack place les vues les unes à côté des autres.
Résultat logique :
HStack est très utilisé pour :
- les lignes de liste ;
- les cellules ;
- les headers ;
- les boutons avec icône ;
- les barres d’action.
4. ZStack
ZStack place les vues les unes par-dessus les autres.
Ici :
Color.blueest le fond ;Text("Bonjour")est affiché au-dessus.
ZStack est utile pour :
- mettre un texte sur une image ;
- créer un fond ;
- superposer un badge ;
- afficher un loader par-dessus un écran ;
- créer des cartes avec overlay.
Exemple avec badge :
5. Spacer
Spacer() prend tout l’espace disponible.
Exemple dans un HStack :
Le Spacer() pousse le chevron tout à droite.
Exemple dans un VStack :
Le Spacer() pousse le bouton vers le bas.
À retenir :
6. padding
padding ajoute de l’espace autour d’une vue.
Tu peux préciser le côté :
Tu peux aussi choisir une valeur :
padding est très utilisé pour éviter que l’interface soit collée aux bords.
7. frame
frame permet de définir ou contraindre la taille d’une vue.
Tu peux aussi demander à une vue de prendre toute la largeur disponible :
Exemple pour un bouton plein largeur :
8. Attention à l’ordre entre padding, background et frame
L’ordre des modifiers change le résultat.
Exemple 1 :
Le fond jaune inclut le padding.
Exemple 2 :
Le fond jaune est seulement derrière le texte, puis le padding est ajouté autour.
Même chose avec frame :
Ici, le padding est ajouté après que le texte prend toute la largeur.
Souvent, pour un bouton custom, tu veux plutôt :
9. Exemple réaliste : cellule de liste
Utilisation :
Ce genre de structure est très courant :
10. Exemple réaliste : écran simple
Ici :
- le premier
Spacer()pousse le contenu vers le centre ; - le deuxième
Spacer()sépare le contenu du bouton ; - le bouton reste en bas ;
.padding()évite que l’écran soit collé aux bords.
11. Points à connaître
VStack, HStack, ZStack peuvent être combinés
La plupart des interfaces SwiftUI sont des combinaisons de stacks.
Exemple :
Spacer dépend de l’espace disponible
Si le parent n’a pas beaucoup d’espace, le Spacer ne fera pas grand-chose.
Spacer est surtout utile dans des containers qui peuvent s’étendre, comme un VStack qui prend toute la hauteur ou un HStack qui prend toute la largeur.
frame(maxWidth: .infinity) ne force pas toujours toute la largeur de l’écran
Il prend toute la largeur disponible dans son parent.
Si le parent est petit, la vue restera limitée par ce parent.
Résumé
À retenir :
VStackempile verticalement ;HStackempile horizontalement ;ZStacksuperpose les vues ;Spacer()prend l’espace disponible ;.padding()ajoute de l’espace autour d’une vue ;.frame(...)contrôle la taille ou l’espace occupé ;- l’ordre des modifiers change le résultat ;
- la plupart des interfaces SwiftUI se construisent en combinant plusieurs stacks.