Layout SwiftUI ZStack使用alignmentGuide()反转视图的定位顺序

Layout SwiftUI ZStack使用alignmentGuide()反转视图的定位顺序,layout,swiftui,Layout,Swiftui,我试图使用带有列标题和一些行的表的ZStack来显示自定义布局,但得到了与正文中指定的顺序相反的布局。代码如下: import SwiftUI struct Test: View { var columns : [String] = ["Column 1","Column 2"] var cells : [[String]] = [ ["(1,1)","(1,2)"], ["(2,1)","(2,2)"], ["(3,1)",

我试图使用带有列标题和一些行的表的ZStack来显示自定义布局,但得到了与正文中指定的顺序相反的布局。代码如下:

import SwiftUI

struct Test: View {

    var columns : [String] = ["Column 1","Column 2"]

    var cells : [[String]] = [
        ["(1,1)","(1,2)"],
        ["(2,1)","(2,2)"],
        ["(3,1)","(3,2)"],
    ]

    var body: some View {
        ZStack(alignment: .topLeading) {
            ForEach(0..<self.columns.count, id: \.self) { column in
                self.viewForCell(self.columns[column], row: 0, column: column)
            }
            ForEach(0..<self.cells.count, id: \.self) { row in
                ForEach(0..<self.cells[row].count, id: \.self ) { column in
                    self.viewForCell(self.cells[row][column], row: 1+row, column: column)
                }
            }
        }
    }

    func viewForCell(_ string: String, row: Int, column: Int) -> some View {
        Text(string)
            .alignmentGuide(.leading, computeValue: { _ in CGFloat(96 * column) })
            .alignmentGuide(.top, computeValue: { _ in CGFloat(24 * row) })
    }
}

struct Test_Previews: PreviewProvider {
    static var previews: some View {
        Test()
    }
}
看起来好像水平和垂直对齐被翻转了。

导入快捷界面
import SwiftUI

struct Test: View {

    var columns : [String] = ["Column 1","Column 2"]

    var cells : [[String]] = [
        ["(1,1)","(1,2)"],
        ["(2,1)","(2,2)"],
        ["(3,1)","(3,2)"],
    ]

    var body: some View {
        ZStack(alignment: .topLeading) {
            ForEach(0..<self.columns.count, id: \.self) { column in
                self.viewForCell(self.columns[column], row: 0, column: column)
            }
            ForEach(0..<self.cells.count, id: \.self) { row in
                ForEach(0..<self.cells[row].count, id: \.self ) { column in
                    self.viewForCell(self.cells[row][column], row: 1+row, column: column)
                }
            }
        }
    }

    func viewForCell(_ string: String, row: Int, column: Int) -> some View {
        Text(string)
            .alignmentGuide(.leading, computeValue: { _ in CGFloat(96 * ( self.columns.count - column )  ) })
            .alignmentGuide(.top, computeValue: { _ in CGFloat(24 * ( self.cells.count - row ) )})
    }
}

struct Test_Previews: PreviewProvider {
    static var previews: some View {
        Test()
    }
}
结构测试:视图{ 变量列:[字符串]=[“第1列”、“第2列”] 变量单元格:[[String]]=[ ["(1,1)","(1,2)"], ["(2,1)","(2,2)"], ["(3,1)","(3,2)"], ] var body:一些观点{ ZStack(对齐:。顶部引导){
弗雷奇(0..这是可行的,但我不明白为什么我们必须计算从右下角开始的x/y偏移..我假设坐标空间起源于左上角,不是吗?你能提供一个链接到任何关于这一点的官方文档吗?@andrewz是的,坐标空间像往常一样起源于左上角,但我们在这里关于alignmentGuide的行为,我没有找到任何官方文档,但此链接将向您解释我所说的更多内容
import SwiftUI

struct Test: View {

    var columns : [String] = ["Column 1","Column 2"]

    var cells : [[String]] = [
        ["(1,1)","(1,2)"],
        ["(2,1)","(2,2)"],
        ["(3,1)","(3,2)"],
    ]

    var body: some View {
        ZStack(alignment: .topLeading) {
            ForEach(0..<self.columns.count, id: \.self) { column in
                self.viewForCell(self.columns[column], row: 0, column: column)
            }
            ForEach(0..<self.cells.count, id: \.self) { row in
                ForEach(0..<self.cells[row].count, id: \.self ) { column in
                    self.viewForCell(self.cells[row][column], row: 1+row, column: column)
                }
            }
        }
    }

    func viewForCell(_ string: String, row: Int, column: Int) -> some View {
        Text(string)
            .alignmentGuide(.leading, computeValue: { _ in CGFloat(96 * ( self.columns.count - column )  ) })
            .alignmentGuide(.top, computeValue: { _ in CGFloat(24 * ( self.cells.count - row ) )})
    }
}

struct Test_Previews: PreviewProvider {
    static var previews: some View {
        Test()
    }
}