Swiftui HStack returning";VStack";看法

Swiftui HStack returning";VStack";看法,swiftui,Swiftui,我试图显示存储在数组中的图像,我将其作为集合提供给ForEach,并为其提供一个HStack视图以显示结果。但就我的一生而言,我无法理解为什么HStack会返回一种“VStack”类型的视图 代码: 导入快捷界面 结构ContentView:View{ var body:一些观点{ Home() } } 结构内容视图\u预览:PreviewProvider{ 静态var预览:一些视图{ ContentView() } } 结构主视图:视图{ //40=水平填充 //60=右侧有2张卡。。。 va

我试图显示存储在数组中的图像,我将其作为集合提供给ForEach,并为其提供一个
HStack
视图以显示结果。但就我的一生而言,我无法理解为什么
HStack
会返回一种“VStack”类型的视图

代码:

导入快捷界面
结构ContentView:View{
var body:一些观点{
Home()
}
}
结构内容视图\u预览:PreviewProvider{
静态var预览:一些视图{
ContentView()
}
}
结构主视图:视图{
//40=水平填充
//60=右侧有2张卡。。。
var width=UIScreen.main.bounds.width-(40+60)
var height=UIScreen.main.bounds.height/2
var账簿=[
书本(id:0,图像:“p1”,偏移量:0),
书籍(id:1,图像:“p0”,偏移量:0),
书(id:2,图像:“p3”,偏移量:0),
书(id:3,图像:“p2”,偏移量:0),
书(id:4,图像:“p5”,偏移量:0),
书籍(id:5,图像:“p4”,偏移量:0),
]
var body:一些观点{
ForEach(books.reversed()){book in
HStack{
图像(book.Image)
.可调整大小()
.aspectRatio(内容模式:.fit)
.frame(宽度:宽度,高度:getheight(索引:book.id))
.转弯半径(25)
阴影(颜色:颜色。黑色。不透明度(0.5),半径:5,x:5)
}
}
}
func getheight(索引:Int)->CGFloat{
返回高度-(指数<3?CGFloat(指数)*40:80)
}
}
结构书:可识别{
变量id:Int
变量图像:字符串
var偏移量:CGFloat
}
为了突出问题,我将代码剥离到了赤裸裸的部分,并附上了我的输出屏幕截图以清晰显示。请帮忙


.

问题在于
HStack
位于
ForEach
内部。您不是在对齐
HStack
中的每个视图,而是在自己的
HStack
中对齐每个单独的视图。在默认情况下,SwiftUI似乎更喜欢垂直布局

请考虑以下错误代码:

struct ContentView: View {
    
    var body: some View {
        ForEach(1 ..< 10) { row in
            HStack {
                Text(String(row))
            }
        }
    }
}
struct ContentView: View {
    
    var body: some View {
        HStack {
            ForEach(1 ..< 10) { row in
                Text(String(row))
            }
        }
    }
}
struct ContentView:View{
var body:一些观点{
ForEach(1..<10){row in
HStack{
文本(字符串(行))
}
}
}
}
这是正确的代码:

struct ContentView: View {
    
    var body: some View {
        ForEach(1 ..< 10) { row in
            HStack {
                Text(String(row))
            }
        }
    }
}
struct ContentView: View {
    
    var body: some View {
        HStack {
            ForEach(1 ..< 10) { row in
                Text(String(row))
            }
        }
    }
}
struct ContentView:View{
var body:一些观点{
HStack{
ForEach(1..<10){row in
文本(字符串(行))
}
}
}
}
这些就是结果。左边是
HStack
ForEach
,右边是
HStack
ForEach


问题在于
HStack
位于
ForEach
内部。您不是在对齐
HStack
中的每个视图,而是在自己的
HStack
中对齐每个单独的视图。在默认情况下,SwiftUI似乎更喜欢垂直布局

请考虑以下错误代码:

struct ContentView: View {
    
    var body: some View {
        ForEach(1 ..< 10) { row in
            HStack {
                Text(String(row))
            }
        }
    }
}
struct ContentView: View {
    
    var body: some View {
        HStack {
            ForEach(1 ..< 10) { row in
                Text(String(row))
            }
        }
    }
}
struct ContentView:View{
var body:一些观点{
ForEach(1..<10){row in
HStack{
文本(字符串(行))
}
}
}
}
这是正确的代码:

struct ContentView: View {
    
    var body: some View {
        ForEach(1 ..< 10) { row in
            HStack {
                Text(String(row))
            }
        }
    }
}
struct ContentView: View {
    
    var body: some View {
        HStack {
            ForEach(1 ..< 10) { row in
                Text(String(row))
            }
        }
    }
}
struct ContentView:View{
var body:一些观点{
HStack{
ForEach(1..<10){row in
文本(字符串(行))
}
}
}
}
这些就是结果。左边是
HStack
ForEach
,右边是
HStack
ForEach