在Text视图的许多属性中,我找不到任何与文本对齐相关的属性。我在一个演示中看到它自动处理RTL,当使用View的主体放置东西时,它总是自动居中。

是否有一些概念,我错过了关于SwiftUI布局系统,如果没有,我怎么能设置文本对齐属性的文本?


当前回答

我想使用Spacer()视图来对齐文本块。 这个例子显示了文本在尾部:

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

其他回答

我实际上遇到了一个问题,我必须在单行上对齐文本。我发现有效的方法是:

Text("some text")
    .frame(alignment: .leading)

如果你把它和帧宽参数结合起来,你可以得到一些漂亮的文本块格式的标签等。

如果你想为文本保持恒定的宽度,“. multilinetextalignment (.leading)”在只有一行文本之前不会起任何作用。

这是对我有效的解决方案:

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


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

用法:

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

我也有同样的问题。 我用这个来解决问题。

Text("Test")
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .leading)

从SwiftUI beta 3开始,你可以用框架修饰符居中文本视图:

Text("Centered")
    .frame(maxWidth: .infinity, alignment: .center)

我们需要对齐文本,而不是它所在的堆栈。因此,调用multilineTextAlignment(.center)并设置行限制,我可以看到文本对齐到中心。我不知道为什么我必须设置行限制,我认为如果你有一个大的文本,它会扩展。

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