使用两个轴时如何将 ScrollView 内容对齐到顶部?
How to align ScrollView content to top when both axes are used?
这是一个简单的例子:
struct Example: View {
var body: some View {
ScrollView([.horizontal, .vertical], showsIndicators: false, content: {
LazyVStack(content: {
ForEach(1...10, id: \.self) { count in
Text("Item \(count)")
}
})
})
}
}
问题是,当同时使用两个轴时 ([.horizontal, .vertical]
),ScrollView
自动 centers 垂直和水平内部的任何内容。我在 ScrollView
中有一个大数据 table,我需要它与 top 对齐,但我不知道该怎么做。 Vstack
s 和 Spacer
s 的常用内容在这里根本不起作用。
我做了一个例子,Slider
所以你可以交互式地测试它。
这通过确保 ScrollView
中的内容 至少 与 ScrollView
本身一样高来实现。这会导致内容填满整个垂直 space,因此它将从顶部开始。
代码:
struct Example: View {
@State private var count: Double = 10
var body: some View {
VStack {
GeometryReader { geo in
ScrollView([.horizontal, .vertical], showsIndicators: false, content: {
VStack(spacing: 0) {
LazyVStack {
ForEach(1 ... Int(count), id: \.self) { count in
Text("Item \(count)")
}
}
Spacer(minLength: 0)
}
.frame(width: geo.size.width)
.frame(minHeight: geo.size.height)
})
}
Slider(value: $count, in: 10 ... 100)
}
}
}
在某些情况下,您可能需要使用 .frame(minWidth: geo.size.width)
而不仅仅是 width
。这可以与 minHeight
.
在同一行
这是一个简单的例子:
struct Example: View {
var body: some View {
ScrollView([.horizontal, .vertical], showsIndicators: false, content: {
LazyVStack(content: {
ForEach(1...10, id: \.self) { count in
Text("Item \(count)")
}
})
})
}
}
问题是,当同时使用两个轴时 ([.horizontal, .vertical]
),ScrollView
自动 centers 垂直和水平内部的任何内容。我在 ScrollView
中有一个大数据 table,我需要它与 top 对齐,但我不知道该怎么做。 Vstack
s 和 Spacer
s 的常用内容在这里根本不起作用。
我做了一个例子,Slider
所以你可以交互式地测试它。
这通过确保 ScrollView
中的内容 至少 与 ScrollView
本身一样高来实现。这会导致内容填满整个垂直 space,因此它将从顶部开始。
代码:
struct Example: View {
@State private var count: Double = 10
var body: some View {
VStack {
GeometryReader { geo in
ScrollView([.horizontal, .vertical], showsIndicators: false, content: {
VStack(spacing: 0) {
LazyVStack {
ForEach(1 ... Int(count), id: \.self) { count in
Text("Item \(count)")
}
}
Spacer(minLength: 0)
}
.frame(width: geo.size.width)
.frame(minHeight: geo.size.height)
})
}
Slider(value: $count, in: 10 ... 100)
}
}
}
在某些情况下,您可能需要使用 .frame(minWidth: geo.size.width)
而不仅仅是 width
。这可以与 minHeight
.