好的,我知道 SwiftUI 是一种思维转变,尤其是来自 HTML 和 css 的世界。但是我花了大约 4 天的时间试图让我觉得应该很容易的工作,只是不能,所以请帮忙!
我有一个应用程序,其中一个屏幕是一个结果表,动态数据可能是一两行/列,但也可能是数百个。所以我希望能够在表格很大的情况下滚动。
我已经复制了我的设置并在 Swift 操场上重现了我的问题,就像这样
import Foundation
import UIKit
import PlaygroundSupport
import SwiftUI
struct ContentView : View {
var cellSize: CGFloat = 50
var numRows: Int = 3
var numCols: Int = 3
var body : some View {
ZStack {
ScrollView([.horizontal,.vertical]) {
HStack( spacing: 0) {
VStack ( spacing: 0) {
ForEach(0 ..< numRows, id: \.self) { row in
Text("row " + row.description)
.frame( height: self.cellSize )
}
}
ForEach(0 ..< self.numCols, id: \.self) { col in
VStack( spacing: 0) {
ForEach(0 ..< self.numRows, id: \.self) { row in
Rectangle()
.stroke(Color.blue)
.frame( width: self.cellSize, height: self.cellSize )
}
}
}
}
.frame( alignment: .topLeading)
}
}
}
}
let viewController = UIHostingController(rootView: ContentView())
PlaygroundPage.current.liveView = viewController
这是网格为 3x3 时得到的结果
我知道默认情况下在 SwiftUI 中居中,但为什么不在.frame( alignment: .topLeading)
HStack 上导致表格与屏幕的左上角对齐?
更糟糕的是,一旦这张桌子变大,我得到的就是:
- 仍然没有与左上角对齐,这作为一个起点是有意义的。
- 当我向左滚动时,我什至无法看到我的标题栏
- 当我靠近时,视野会让我远离边缘。就像我可以到达可以看到桌子顶部边缘的地步,但它立即将我弹回来。
- 右侧有大量空白,这可能与我在左侧没有看到我的标题列有关。
我在这里做错了什么?我已经筋疲力尽地在这里尝试各种视图的所有不同frame
选项alignment
。