J'essayais de comprendre cela moi-même comme d'autres réponses mentionnent ici Text.multilineTextAlignment(_:)
/ VStack(alignment:)
/ frame(width:alignment:)
mais chaque solution résout un problème spécifique. Finalement, cela dépend des exigences de l'interface utilisateur et d'une combinaison de celles-ci.
VStack(alignment:)
Le alignment
voici pour les vues intérieures les unes par rapport aux autres.
Ainsi, la spécification .leading
associerait toutes les vues intérieures pour que leur direction soit alignée les unes sur les autres.
VStack(alignment: .leading, spacing: 6) {
Text("Lorem ipsum dolor")
.background(Color.gray.opacity(0.2))
Text("sit amet")
.background(Color.gray.opacity(0.2))
}
.background(Color.gray.opacity(0.1))
.frame
Dans frame(width:alignment:)
ou frame(maxWidth:alignment:)
, le alignment
est pour le contenu dans la largeur donnée.
VStack(alignment: .leading, spacing: 6) {
Text("Lorem ipsum dolor")
.background(Color.gray.opacity(0.2))
Text("sit amet")
.background(Color.gray.opacity(0.2))
}
.frame(width: 380, alignment: .trailing)
.background(Color.gray.opacity(0.1))
Les vues intérieures sont alignées en tête respectivement les unes par rapport aux autres mais les vues elles-mêmes sont alignées en arrière respectivement par rapport au VStack
.
.multilineTextAlignment
Cela spécifie l'alignement du texte à l'intérieur et peut être mieux vu lorsqu'il y a plusieurs lignes sinon sans définition frame(width:alignment)
, la largeur est automatiquement ajustée et est affectée par les valeurs par défaut alignment
.
VStack(alignment: .trailing, spacing: 6) {
Text("0. automatic frame\n+ view at parent's specified alignment\n+ multilineTA not set by default at leading")
.background(Color.gray.opacity(0.2))
Text("1. automatic frame\n+ view at parent's specified alignment\n+ multilineTA set to center")
.multilineTextAlignment(.center)
.background(Color.gray.opacity(0.2))
Text("2. automatic frame\n+ view at parent's specified alignment\n+ multilineTA set to trailing")
.multilineTextAlignment(.trailing)
.background(Color.gray.opacity(0.2))
}
.frame(width: 380, alignment: .trailing)
.background(Color.gray.opacity(0.1))
Tests avec combinaisons:
VStack(alignment: .trailing, spacing: 6) {
Text("1. automatic frame, at parent's alignment")
.background(Color.gray.opacity(0.2))
Text("2. given full width & leading alignment\n+ multilineTA at default leading")
.frame(maxWidth: .infinity, alignment: .leading)
.background(Color.gray.opacity(0.2))
Text("3. given full width & center alignment\n+ multilineTA at default leading")
.frame(maxWidth: .infinity, alignment: .center)
.background(Color.gray.opacity(0.2))
Text("4. given full width & center alignment\n+ multilineTA set to center")
.multilineTextAlignment(.center)
.frame(maxWidth: .infinity, alignment: .center)
.background(Color.gray.opacity(0.2))
Text("5. given full width & center alignment\n+ multilineTA set to trailing")
.multilineTextAlignment(.trailing)
.frame(maxWidth: .infinity, alignment: .center)
.background(Color.gray.opacity(0.2))
Text("6. given full width but no alignment\n+ multilineTA at default leading\n+ leading is based on content, looks odd sometimes as seen here")
.frame(maxWidth: .infinity)
.background(Color.gray.opacity(0.2))
}
.frame(width: 380)
.background(Color.gray.opacity(0.1))