308 votes

Alignement du texte de SwiftUI

Parmi les nombreuses propriétés de la Text Je n'ai trouvé aucune information relative à l'alignement du texte. J'ai vu dans une démo qu'il gère automatiquement le RTL, et lorsque l'on place des éléments en utilisant la vue body il le centre toujours automatiquement.

Est-ce qu'il y a un concept qui m'échappe concernant le système de mise en page dans SwiftUI et si ce n'est pas le cas, comment puis-je définir les propriétés d'alignement du texte à l'aide de l'option Text ?

21voto

Miki Points 52

Nous devons aligner le texte et non la pile dans laquelle il se trouve. Donc, en appelant multilineTextAlignment(.center) et en fixant les limites de ligne, je peux voir les textes alignés au centre. Je ne sais pas pourquoi je dois définir les limites de ligne, je pensais que cela s'étendrait si vous avez un grand texte.

Text("blahblah")
        .font(.headline)
        .multilineTextAlignment(.center)
        .lineLimit(50)

17voto

Kamil Zaborowski Points 111

Si vous souhaitez conserver une largeur constante pour le texte, l'option ".multilineTextAlignment(.leading)" n'aura aucun effet tant qu'il n'y aura pas une seule ligne de texte.

Voici la solution qui a fonctionné pour moi :

struct LeftAligned: ViewModifier {
    func body(content: Content) -> some View {
        HStack {
            content
            Spacer()
        }
    }
}

extension View {
    func leftAligned() -> some View {
        return self.modifier(LeftAligned())
    }
}

Utilisation :

Text("Hello").leftAligned().frame(width: 300)

14voto

ktr kathir Points 271

Vous pouvez définir l'alignement de la pile verticale en tant qu'alignement principal. Comme ci-dessous

 VStack(alignment: .leading) {
            Text("Turtle Rock")
                .font(.title)
            Text("Joshua Tree National Park")
                .font(.subheadline)
        }

enter image description here

14voto

J'aimerais utiliser Spacer() vue de l'alignement du bloc de texte. Cet exemple montre le texte sur le côté arrière :

HStack{
    Spacer()
    Text("Wishlist")
}

0voto

Hannes Points 86

Je ne sais pas si c'est la réponse que vous cherchez mais j'ai fait l'expérience que SwiftUI passe automatiquement en RTL pour des langues comme l'arabe, vous n'avez pas besoin de le spécifier explicitement comme dans UIKit.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X