Как выровнять содержимое ScrollView по верхнему краю, когда используются обе оси?
Вот простой пример:
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
, и мне нужно, чтобы он был выровнен по верхнему краю, но я не мог понять, как это сделать. Обычные вещи с
Vstack
песок
Spacer
s здесь вообще не работает.
1 ответ
Я привел пример с
Slider
так что вы можете протестировать его в интерактивном режиме.
Это работает за счет того, что содержание в пределах как минимум такое же высокое, как и
ScrollView
сам. Это приводит к тому, что контент заполняет все вертикальное пространство, поэтому он будет начинаться сверху.
Код:
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) {
VStack {
ForEach(1 ... Int(count), id: \.self) { count in
Text("Item \(count)")
}
}
Spacer(minLength: 0)
}
.frame(minHeight: geo.size.height)
})
}
Slider(value: $count, in: 10 ... 100)
}
}
}