Fiche 03.04 — Cards et containers réutilisables en SwiftUI
Objectif
Comprendre comment créer des blocs visuels réutilisables comme des cards, containers, sections et encadrés de contenu.
1. L’idée à comprendre
Dans une app SwiftUI, beaucoup d’écrans sont composés de blocs :
- card de profil ;
- card d’article ;
- card de statistique ;
- section de réglages ;
- bloc d’information ;
- encadré d’erreur ;
- container avec titre.
Au lieu de répéter partout :
Tu peux créer des composants ou des modifiers réutilisables.
2. Card simple
Utilisation :
3. Card avec contenu personnalisable
Pour rendre une card très réutilisable, tu peux utiliser @ViewBuilder.
Utilisation :
L’avantage : AppCard gère le style, mais le contenu reste libre.
4. Card avec titre intégré
Utilisation :
5. Card cliquable
Une card peut être cliquable en utilisant Button.
Utilisation :
6. Card avec image
Utilisation :
7. Créer un ViewModifier de card
Si tu veux appliquer le même style à beaucoup de vues, tu peux créer un ViewModifier.
Extension :
Utilisation :
8. Section réutilisable
Utilisation :
9. Où ranger ces composants ?
Pour un projet structuré :
Si une card est spécifique à une feature :
10. Preview
En UIKit (rappel)
Une « card » n'était pas un type : c'était une UIView dont tu configurais le layer à la main, et tu plaçais le contenu avec des contraintes.
Si tu voulais une ombre, il fallait une vue SANS masksToBounds (l'ombre déborde du cadre), donc souvent deux vues imbriquées ou un cornerCurve à part :
Le « container » qui empile titre + sous-titre, c'était une UIStackView posée dans la card avec des contraintes (padding = layoutMargins ou des constant sur les contraintes) :
La différence de mentalité : en UIKit tu construis et configures un objet visuel étape par étape (impératif), et tu jongles entre masksToBounds pour les coins et son absence pour l'ombre. En SwiftUI, le style est décrit par des modifiers chaînés sur la vue.
👉 En SwiftUI : .padding().background(...).clipShape(RoundedRectangle(cornerRadius: 16)).shadow(radius: 8) — pas de layer, pas de contraintes, pas de conflit ombre/clip.
11. Points à connaître
Préfère un composant si le contenu a une logique spécifique
Exemple :
C’est mieux qu’une card générique si l’affichage est vraiment propre aux articles.
Préfère un modifier si tu veux seulement réutiliser un style
Exemple :
C’est utile quand le contenu varie beaucoup, mais le style reste le même.
Évite les styles dupliqués partout
Si tu répètes plusieurs fois :
c’est souvent le signe qu’il faut créer une card ou un modifier.
Résumé
À retenir :
- une card est un container visuel réutilisable ;
@ViewBuilderpermet de créer une card avec contenu libre ;- une card peut être statique ou cliquable ;
- un
ViewModifierest pratique pour réutiliser seulement un style ; - une section réutilisable peut organiser plusieurs cards ;
- range les containers partagés dans
Shared/Components; - crée une card spécifique si le contenu appartient à une feature précise.