macos - 重新加载新数据/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
}
推荐阅读
- php - 如何在我的 WordPress 网站致命错误中解决此问题
- php - 为什么我不能在 laravel 通知表中存储新列?
- dataframe - 将列表转换为火花流中的列
- excel - 如何使用 VBA 在海量数据中更快地查找值
- docker - 获取 html 响应而不是 json rasa x 服务器模式(docker)
- .net-core - 大众运输中发送功能的底层
- javascript - 如何使用 Express 服务器返回请求的 Angular GET 格式?
- javascript - 性能:Html5 Canvas / Javascript - 使用 canvas.drawImage 与 canvas.style 移动背景图像
- javascript - 我应该在 Angular 的可重用组件中使用 EventEmitter 还是共享服务?
- ios - 为什么 UITableView 内容偏移量为-20.0?