6

好的,我知道 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 时得到的结果

3x3

我知道默认情况下在 SwiftUI 中居中,但为什么不在.frame( alignment: .topLeading)HStack 上导致表格与屏幕的左上角对齐?

更糟糕的是,一旦这张桌子变大,我得到的就是:

15x15

  1. 仍然没有与左上角对齐,这作为一个起点是有意义的。
  2. 当我向左滚动时,我什至无法看到我的标题栏
  3. 当我靠近时,视野会让我远离边缘。就像我可以到达可以看到桌子顶部边缘的地步,但它立即将我弹回来。
  4. 右侧有大量空白,这可能与我在左侧没有看到我的标题列有关。

我在这里做错了什么?我已经筋疲力尽地在这里尝试各种视图的所有不同frame选项alignment

4

0 回答 0