Layout SwiftUI ZStack使用alignmentGuide()反转视图的定位顺序
我试图使用带有列标题和一些行的表的ZStack来显示自定义布局,但得到了与正文中指定的顺序相反的布局。代码如下: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)",
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()
}
}