Прокси-сервер ScrollViewReader. ScrollTo not scrolling

У меня есть этот код SwiftUI, который создает большое представление пользовательского интерфейса, которое слишком велико для размещения на экране, поэтому я поместил его в 2D-прокрутку. Хотя этот пример представляет собой сетку, предположим, что содержимое заполняется так же, но элементы расположены более случайным образом. Когда появляется представление, я хочу, чтобы он начинался с центрирования одного из этих элементов, в случае ниже элемента с идентификатором «(25,25)». Это нормально компилируется, отлично выглядит в документации и работает, но не прокручивается до ZStack с идентификатором "(25,25)". Почему он не прокручивается до этого ZStack? Код был протестирован как с iOS 14, так и с iOS 15b1.

      var body: some View {
    ScrollViewReader { scrollView in
        ScrollView([.horizontal, .vertical]) {
            VStack(alignment: .leading, spacing: 0) {
                ForEach(0..<50) { y in
                    HStack(alignment: .center, spacing: 0) {
                        ForEach(0..<50) { x in
                            ZStack {
                                Circle()
                                    .frame(width: 35, height: 35)
                                    .foregroundColor(.blue.opacity(0.5))
                                Text("(\(x),\(y)")
                                    .font(.system(size: 8))
                            }
                            .id("(\(x),\(y))")
                            .offset(x: CGFloat(x * 25), y: CGFloat(y * 25))
                        }
                    }
                }
            }
            
        }
        .onAppear {
            DispatchQueue.main.asyncAfter(deadline: .now() + 3.0) {
                scrollView.scrollTo("(25,25)")
            }
        }
    }
}

1 ответ

Я думаю, вы ошибаетесь смещением для заполнения, просто с заполнением он работает.


Однако, похоже, что отсутствие прокрутки к представлению со смещением является ошибкой.

Теоретически в вашем коде есть ошибка: вы добавляете идентификатор в представление перед смещением, поэтому, когда вы прокручиваете до этого идентификатора, он прокручивается туда, где было представление до смещения.

Выключатель offset а также id вокруг, и он должен работать (хотя это не так, что заставляет меня думать, что где-то здесь есть ошибка SwiftUI).

Другие вопросы по тегам