Ios 如何在SwiftUI中将项目与VStack内部的顶部对齐?

Ios 如何在SwiftUI中将项目与VStack内部的顶部对齐?,ios,swiftui,Ios,Swiftui,我刚开始使用swiftui,我面临ui对齐方面的问题。下面的代码从图像顶部创建一个空间 VStack(alignment: .leading) { Image(item.imageUrl) .resizable() .aspectRatio(contentMode: .fit) .frame(width: 72, height: 72, alignment: .top).padding(.top,

我刚开始使用swiftui,我面临ui对齐方面的问题。下面的代码从图像顶部创建一个空间

VStack(alignment: .leading) {
        Image(item.imageUrl)
              .resizable()
              .aspectRatio(contentMode: .fit)
              .frame(width: 72, height: 72, alignment: .top).padding(.top,0)
        Text("\(item.name)").font(Font.system(size:12, design: .default))
             .multilineTextAlignment(.center)
             .frame(maxWidth: .infinity).lineLimit(2)    
        }
}
我可以看到VStack接受param
对齐
,但它是水平对齐。我需要的是图像应该粘贴到superview的顶部。 是否有一种不使用垫片()的方法来执行此操作

就像在react native中一样,我们曾经为孩子们的水平和垂直对齐设置了justifyContent和alignItems

更新:

文本或任何视图也存在同样的问题。 例如,此代码将两个文本放置在视图的中心

 VStack(alignment: .leading, spacing: 0) {
        Text("line 1")
        Text("line 2")
 }

VStack中的参数对齐用于水平对齐

现在,要将这些文本与顶部对齐,我唯一能想到的方法是引入
Spacer()
,如下所示:

struct MyCustomView:View {
  var body: some View {
    VStack(alignment: .leading, spacing: 0) {
      Text("line 1")
      Text("line 2")
      Spacer()
    }
 }
这确实暂时解决了问题:

但是间隔将在复杂视图中产生问题,假设另一个开发人员希望在我的视图下方添加一个自定义视图(本例中为第3行),间隔将在两者之间创建额外的空间

VStack {
     MyCustomView()
     Text("line 3")
 }


有没有更好的方法可以使VStack中的子视图(以及后续视图)在没有间隔的情况下保持与顶部对齐?

SwiftUI视图很便宜。将另一个VStack()垫片()一起使用

    VStack {
        VStack(alignment: .center, spacing: 0) {
          Text("line 1")
          Text("line 2")
          // Add your Views here
        }
        Spacer()
    }

您可以尝试使用
.frame()
修改器使
VStack()
在superview中具有完整的大小。在框架中,您可以对齐内容
topLeading

var body: some View {
    VStack(alignment: .leading, spacing: 0) {
        Text("line 1")
        Text("line 2")
    }
    .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity, alignment: .topLeading)
    .border(Color.red)
}
该解决方案不需要垫片


VStack紧挨着内容,所以我不认为这是对齐问题,至少在提供的代码中是这样。你能提供更多的代码上下文并显示屏幕截图吗?我会更好,如果你提供最小的可复制的例子。上面的代码是好的。。顶部没有空间。VStack包装在哪里?@Asperi更新了我的问题,请检查它们是否要将子视图居中对齐。@mahan Line1和line2应该居中?但是仍然在右上角?@davidev感谢man,这里的对齐参数是“对齐”类型(而不是VStack中的水平对齐),它接受水平和垂直对齐的值,例如顶部、中心、顶部引线等。