Ios 如何在SwiftUI中将项目与VStack内部的顶部对齐?
我刚开始使用swiftui,我面临ui对齐方面的问题。下面的代码从图像顶部创建一个空间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,
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中的水平对齐),它接受水平和垂直对齐的值,例如顶部、中心、顶部引线等。