#ios #swift #xcode #swiftui #geometryreader
Вопрос:
Я пытаюсь выровнять прямоугольник в представлении GeometryReader, который вложен в HStack, а затем в ScrollView.
Я не могу выровнять Rect() по нижней части представления, оно рисуется только сверху.
Это не работает, прямоугольник рисуется сверху, а не снизу представления.
Как мне это исправить? Я попытался установить выравнивание .bottom для всех представлений и фреймов, но ни один из них не работает.
Если требуется дополнительное разъяснение, пожалуйста, дайте мне знать.
Я обновил свой код до реального примера.
import SwiftUI
struct Scrollview1: View {
let samples = [106, 77, 53, 15, 83, 80, 63, 43, 80, 81, 66, 75, 78, 57, 18, 73, 80, 70, 27, 82, 83, 70, 66, 78, 50, 30, 13, 77, 67, 40, 12, 76, 73, 73, 77, 63, 42, 12, 88, 77, 46, 14, 90, 83, 73, 79, 73, 34, 14, 87, 78, 53, 37, 79, 75, 19, 86, 74, 45, 14, 79, 81, 46, 14, 82, 76, 44, 69, 70, 37, 13, 80, 81, 48, 15, 76, 79, 41, 76, 75, 49, 26, 79, 78, 57, 18, 79]
var body: some View {
ScrollView(.horizontal, showsIndicators: false) {
VStack (spacing: 3) {
HStack (alignment: .bottom , spacing: 1) {
ForEach(samples, id: .self) { sample in
GeometryReader { geo in
Rectangle()
.fill( geo.frame(in: .global).maxX > 100 amp;amp; 250 > geo.frame(in: .global).maxX ? Color.red : Color.gray)
// .frame( alignment: .leading)
.frame(width: 5, height: CGFloat(sample))
}
}
}
}
}
}
}
struct Scroll_Previews1: PreviewProvider {
static var previews: some View {
Scrollview1()
}
}
Комментарии:
1. Похоже, вы хотите изменить вид прокрутки, как в новых элементах, которые начинаются снизу и прокручиваются вверх. Если это так, см. Это сообщение в блоге . Если нет, то что именно вы хотите?
2. Поэтому я хочу, чтобы прямоугольник был выделен в нижней части вида. итак, это сталагмит, а не сталагмит.
3. @Yrb Я добавил изображение того, как это выглядит.
4. Но что еще происходит в
ScrollView
? Если ничего другого, зачем это использовать? Это было бы намного проще безScrollView
.5. @Yrb это упрощенный пример. В scrollview будет много прямоугольников. Поэтому, если вы попробуете использовать один (или несколько) прямоугольников, вы увидите проблему.
Ответ №1:
Я думаю, это то, что вы ищете. Когда объект ScrollView
переходит в GeometryReader
режим, он выравнивается по верхнему краю с видом. Я поместил фон Scrollview
, чтобы вы могли видеть, что он был всего лишь высотой 50. Ваша проблема не в ScrollView
этом, а в том GeometryReader
. ScrollView
Должно быть в a VStack
с a Spacer()
выше, чтобы опустить его.
GeometryReader { geometry in
VStack {
Spacer()
ScrollView(.horizontal){
HStack(spacing: 10) {
ForEach(0..<30) { index in
Rectangle()
.frame(width: 10, height: CGFloat.random(in: 20...50))
}
}
}
.background(Color.red)
}
.padding()
}
Комментарии:
1. Я обновил свой код, чтобы показать проблему и изображение того, что я хотел бы сделать.
2. Я отредактировал свой ответ, чтобы он вызывал несколько прямоугольников.