内容を更新できるリストがあります。リストを下にスクロールした後に内容が変更された場合、更新されたリストは一番上にリセットされません。
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
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加