SwiftUI如何对齐大于屏幕宽度的视图

我正在使用SwiftUI绘制一个表,该表的行和列太多,无法容纳

屏幕宽度/高度。在这种情况下,我无法将视图对齐为

领先,但总是以某种方式居中。我该如何调整他们的领先地位?这

是绘制表格的视图:

struct TableView: View {

let columnCount: Int = 9

let rowCount: Int = 14

var body: some View {

VStack(alignment: .leading, spacing: 20) {

ScrollView([.vertical, .horizontal], showsIndicators: false) {

GridStack(rows: self.rowCount, columns: self.columnCount) { row, col in

Text("ROW \(String(row)) COL \(String(col))")

.frame(width: 120)

}

}

}

}

}

这是GridStack:

struct GridStack<Content: View>: View {

let rows: Int

let columns: Int

let content: (Int, Int) -> Content

var body: some View {

VStack(alignment: .leading) {

ForEach(0 ..< rows) { row in

HStack(alignment: .top) {

ForEach(0 ..< self.columns) { column in

self.content(row, column)

}

}

}

}

.padding([.top, .bottom], 20)

}

init(rows: Int, columns: Int, @ViewBuilder content: @escaping (Int, Int) -> Content) {

self.rows = rows

self.columns = columns

self.content = content

}

}

这就是应用程序中的外观。请注意,边缘不适合

屏幕内部。即使我尝试滚动到那里,它也会反弹回来。

回答:

这是一个可能的方法演示(以及改进的方向,因为我

没有测试所有情况和可能性)

注意:如果仅选择一个ScrollView轴

,则它会自动进行内容对齐,否则我现在很困惑,但是没有

配置功能。因此,以下可能被视为临时

解决方法。

这个想法是通过GeometryReader重新计算坐标空间中的

框架来读取网格内容偏移.global.并显式减轻它。

还尝试根据设备

方向来使偏移量无效并进行处理(可能不理想,但作为第一次尝试),因为它们是

不同的。

在此处输入图片说明 在此处输入图片说明

import Combine

struct TableView: View {

let columnCount: Int = 9

let rowCount: Int = 14

@State private var offset: CGFloat = .zero

private let orientationPublisher = NotificationCenter.default.publisher(for: UIDevice.orientationDidChangeNotification)

var body: some View {

VStack(alignment: .leading, spacing: 20) {

ScrollView([.horizontal, .vertical], showsIndicators: false) {

GridStack(rows: self.rowCount, columns: self.columnCount) { row, col in

Text("ROW \(String(row)) COL \(String(col))")

.fixedSize()

.frame(width: 150)

}

.background(rectReader())

.offset(x: offset)

}

}

.onReceive(orientationPublisher) { _ in

self.offset = .zero

}

}

func rectReader() -> some View {

return GeometryReader { (geometry) -> AnyView in

let offset = -geometry.frame(in: .global).minX

if self.offset == .zero {

DispatchQueue.main.async {

self.offset = offset

}

}

return AnyView(Rectangle().fill(Color.clear))

}

}

}

以上是 SwiftUI如何对齐大于屏幕宽度的视图 的全部内容, 来源链接: utcz.com/qa/415960.html

回到顶部