swift 有没有办法让HStack成为领导者?

tpgth1q7  于 2023-05-16  发布在  Swift
关注(0)|答案(2)|浏览(173)

我有一个问题与HStack有更大的宽度比父视图显示中心不领先。

struct WidgetEntryView : View {
    var entry: Provider.Entry
    
    var body: some View {
        ZStack {
            Color(.red)
            HStack {
                Text("haha1")
                    .frame(width: 50)
                Text("haha2")
                    .frame(width: 50)
                Text("haha3")
                    .frame(width: 50)
                Text("haha4")
                    .frame(width: 50)
                Text("haha5")
                    .frame(width: 50)
                Text("haha6")
                    .frame(width: 50)
                Text("haha7")
                    .frame(width: 50)
                Text("haha8")
                    .frame(width: 50)
            }
        }
    }
}

我正在创建一个包含一些数据的小部件。它是一个中等大小的小部件,正如你所看到的,HStack的宽度比小部件的宽度大,所以它看起来像下面这样。
https://i.stack.imgur.com/uG4wO.png
目前,HStack的锚点是中心,所以它是从中心显示的,但我想把它移到leading,这样它就从haha1开始了。
我如何才能做到这一点?

rjzwgtxy

rjzwgtxy1#

struct WidgetEntryView : View {
    var entry: Provider.Entry

    var body: some View {
        ZStack {
            Color(.red)
            Color.clear
                .overlay(
                    HStack {
                        Text("haha1")
                            .frame(width: 50)
                        Text("haha2")
                            .frame(width: 50)
                        Text("haha3")
                            .frame(width: 50)
                        Text("haha4")
                            .frame(width: 50)
                        Text("haha5")
                            .frame(width: 50)
                        Text("haha6")
                            .frame(width: 50)
                        Text("haha7")
                            .frame(width: 50)
                        Text("haha8")
                            .frame(width: 50)
                    }, alignment: .leading
                )

        }
    }
}

变了个戏法

y53ybaqx

y53ybaqx2#

另一种方式:使用GeometryReader
使用GeometryReader时,子对象自动向左对齐。(这也可能是一个诡计)

struct WidgetEntryView : View {
    var entry: Provider.Entry
    
    var body: some View {
        GeometryReader { _ in  // Wrap with GeometryReader.
            ZStack {
                Color(.red)
                
                HStack {
                    Text("haha1")
                        .frame(width: 50)
                    Text("haha2")
                        .frame(width: 50)
                    Text("haha3")
                        .frame(width: 50)
                    Text("haha4")
                        .frame(width: 50)
                    Text("haha5")
                        .frame(width: 50)
                    Text("haha6")
                        .frame(width: 50)
                    Text("haha7")
                        .frame(width: 50)
                    Text("haha8")
                        .frame(width: 50)
                }
            }
        }
    }
}

相关问题