Прокси-сервер 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).