0

我有两个文本的简单视图。它body是这样的:

VStack {
    Text("One")
    Text("Two")
    Text("Three")
}

这会产生如下视图:

现有布局

但我想要的是,仅对Text视图使用修饰符(即不HStack使用Spacers),实现如下布局:

所需布局

这目前可能吗?我希望以某种方式使Texts 全宽,然后仅使用文本对齐方式就可以了,但还没有弄清楚。

4

3 回答 3

2

嗯...因为没有任何附加条件或限制,只需添加两行代码

预览中的演示(蓝色边框只是代码中的一个选择)

演示

    VStack {
        Text("One")
            .frame(maxWidth: .infinity, alignment: .leading)
        Text("Two")
        Text("Three")
            .frame(maxWidth: .infinity, alignment: .trailing)
    }
于 2020-03-20T16:18:16.253 回答
1

一种方法是只设置框架:

struct ContentView: View {
    var body: some View {
        VStack {
            Text("One")
                .frame(minWidth: 0,
                       maxWidth: .infinity,
                       alignment: .leading)
            Text("Two")
                .frame(minWidth: 0,
                       maxWidth: .infinity,
                       alignment: .center)
            Text("Three")
                .frame(minWidth: 0,
                       maxWidth: .infinity,
                       alignment: .trailing)

        }
    }
}
于 2020-03-20T16:16:30.680 回答
1

是的,这是可能的。您可以定义一个修饰符,如:

extension View {
    func horizontalAlignment(_ alignment: HorizontalAlignment) -> some View {
        Group {
            if alignment == .leading {
                HStack {
                    self
                    Spacer()
                }
            } else if alignment == .trailing {
                HStack {
                    Spacer()
                    self
                }
            } else {
                self
            }
        }
    }
}

并像这样使用它:

VStack {
    Text("One")
        .horizontalAlignment(.leading)
    Text("Two")
        .horizontalAlignment(.center)
    Text("Three")
        .horizontalAlignment(.trailing)
}

当然,多种方法是可能的。

于 2020-03-20T16:11:24.880 回答