SwiftUI ScrollView и выравнивание - PullRequest
2 голосов
/ 01 апреля 2020

Хорошо, я знаю, что SwiftUI - это изменение мышления, особенно происходящее из мира HTML и css. Но я потратил около 4 дней, пытаясь заставить что-то работать, что, на мой взгляд, должно быть довольно простым и просто не может, поэтому, пожалуйста, помогите!

У меня есть приложение, где один экран представляет собой таблицу результатов, динамически c данных, которые могут быть одной или двумя строками / столбцами, но также могут быть сотнями. Поэтому я хочу иметь возможность прокручиваться в тех случаях, когда стол огромен.

Я скопировал свои настройки и воспроизвел свои проблемы на игровой площадке Swift, например:

import Foundation
import UIKit
import PlaygroundSupport
import SwiftUI

struct ContentView : View {
    var cellSize: CGFloat = 50
    var numRows: Int = 3
    var numCols: Int = 3
    var body : some View {

        ZStack {
            ScrollView([.horizontal,.vertical]) {

                    HStack( spacing: 0) {
                        VStack ( spacing: 0) {
                            ForEach(0 ..< numRows, id: \.self) { row in
                                Text("row " + row.description)
                                    .frame( height: self.cellSize )
                            }
                        }
                        ForEach(0 ..< self.numCols, id: \.self) { col in
                            VStack( spacing: 0) {
                                ForEach(0 ..< self.numRows, id: \.self) { row in
                                    Rectangle()
                                    .stroke(Color.blue)
                                        .frame( width: self.cellSize, height: self.cellSize )
                                }
                            }
                        }
                    }
                  .frame( alignment: .topLeading)
            }
        }
    }
}

let viewController = UIHostingController(rootView: ContentView())
PlaygroundPage.current.liveView = viewController

Вот что Я получаю, когда сетка имеет размер 3x3

3x3

Я знаю, что в SwiftUI по умолчанию центрируется, но почему .frame( alignment: .topLeading) на HСтак, чтобы таблица была выровнена по левому верхнему углу экрана?

Тогда еще хуже, когда эта таблица станет большой, вот что я получаю:

15x15

  1. По-прежнему не выровнен по левому верхнему углу, что имеет смысл в качестве отправной точки.
  2. Когда я прокручиваю влево, я не могу даже добраться до точки, где я могу видеть столбец моего заголовка
  3. Вид сбрасывает меня с краев, когда я подхожу ближе. Как будто я могу добраться до точки, где я вижу верхний край таблицы, но он сразу отскакивает от меня.
  4. Тонна пробелов справа, что, вероятно, связано с тем, что я не вижу столбцы моего заголовка слева.

Что я здесь не так делаю? Я исчерпал все различные варианты frame и alignment в различных режимах просмотра здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...