当重新加载新数据/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)
}
}
}
}

我试过用ScrollReader包装列表,但这也不起作用:

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)
}
}
}
}
}

您可能需要类似的东西

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
}

最新更新