J'essayais de comprendre moi-même ce que d'autres réponses mentionnent ici. Text.multilineTextAlignment(_:)
/ VStack(alignment:)
/ frame(width:alignment:)
mais chaque solution résout un problème spécifique. En fin de compte, cela dépend des exigences de l'interface utilisateur et d'une combinaison de celles-ci.
VStack(alignment:)
El alignment
ici, il s'agit des vues intérieures respectives des uns et des autres.
Ainsi, en spécifiant .leading
associerait tous les points de vue intérieurs pour qu'ils soient alignés les uns avec 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
En 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 les unes par rapport aux autres, mais les vues elles-mêmes sont alignées en queue par rapport aux vues intérieures. VStack
.
.multilineTextAlignment
Ceci spécifie l'alignement du texte à l'intérieur et peut être vu de façon optimale lorsqu'il y a plusieurs lignes, sinon sans une ligne définie frame(width:alignment)
la largeur est automatiquement ajustée et est affectée par la valeur par défaut de l'indicateur de largeur. alignment
s.
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))
Essais avec des 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))