SwiftUI如何在表单中居中放置文本?

时间:2019-08-16 04:23:46

标签: swiftui

.multilineTextAlignment(.center)Text位于Form内时似乎无效,我该如何居中?

Form {
    Text("I am left aligned")
    Text("Why won't I center?").multilineTextAlignment(.center)
}

5 个答案:

答案 0 :(得分:3)

这有效。

Form {
    Text("I am left aligned")
    Text("I am centered!")
    .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity, alignment: .center)
}

答案 1 :(得分:2)

您可以将文本换成HStack

Form {
    Text("I am left aligned")
    HStack {
        Spacer()
        Text("I am centered!")
        Spacer()
    }
}

答案 2 :(得分:2)

如果您需要将多个项目放在表单中心,请使用以下结构,该结构接受符合视图的对象以供您显示:

struct CenterInForm<V: View>: View {

    var content: V

    init(_ content: V) { self.content = content }

    var body: some View {
        HStack {
            Spacer()
            content
            Spacer()
        }
    }
}

用法:

CenterInForm(Text("TOTAL: $100"))
CenterInForm(Button("Confirm order") { print("placing order") })

答案 3 :(得分:0)

如果HStack中有两个元素(即2个文本),并且需要将第二个Text放在中间,那么一个小技巧就是插入第三个隐藏元素,如第一个。

HStack(alignment: .center) {
            Button(action: {
                print("later...")
            }) {
                Text("Later")
            }
            .font(font)
            Text("Centered Text")
                .foregroundColor(SwiftUI.Color(.white))
                .frame(minWidth: 0,
                       maxWidth: .infinity,
                       minHeight: 0,
                       maxHeight: .infinity,
                       alignment: .center)
            Button(action: {
                print("later...")
            }) {
                Text("Later")
            }
            .hidden()
        }

答案 4 :(得分:0)

使用 frame 将文本框架扩展到全宽,使用 multilineTextAlignment 使文本(包括换行文本)居中。

Form {
    Text("Centered text, even if wraps")
        .frame(maxWidth: .infinity)
        .multilineTextAlignment(.center)
}