Как выровнять содержимое 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песок Spacers здесь вообще не работает.

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)
        }
    }
}
Другие вопросы по тегам