#macos #swiftui
#macos #swiftui
Вопрос:
У меня есть список, содержимое которого можно обновить. Если содержимое изменяется после прокрутки списка вниз по экрану, обновленный список не сбрасывается в начало.
import SwiftUI
struct MyData {
let a: [String]
let b: [String]
init() {
var pa = [String]()
var pb = [String]()
for i in 0...100 {
pa.append("A: (i)")
pb.append("B: (i)")
}
self.a = pa
self.b = pb
}
}
struct ListNotResetingToTop: View {
let data = MyData()
@State var showA = true
var body: some View {
VStack {
Button("Switch") { showA.toggle() }
List(showA ? data.a : data.b, id: .self) { value in
Text(value)
}
}
}
}
Я попытался обернуть список в программе чтения прокрутки, но это тоже не сработало:
struct ListNotResetingToTop: View {
let data = MyData()
@State var showA = true
var body: some View {
VStack {
Button("Switch") { showA.toggle() }
ScrollViewReader { proxy in
List(showA ? data.a : data.b, id: .self) { value in
Text(value)
}.onChange(of: showA) { _ in
proxy.scrollTo(showA ? data.a.first : data.b.first)
}
}
}
}
}
Ответ №1:
Возможно, вам нужно что-то вроде
VStack {
Button("Switch") { showA.toggle() }
List(showA ? data.a : data.b, id: .self) { value in
Text(value)
}.id(showA) // just make id depend on modified data
}