在 SwiftUI 中滚动到填充有 CoreData 的列表底部
Scroll to bottom of a list populated with CoreData in SwiftUI
我试图在点击按钮时滚动到 List
的底部。我试过将 List
放在 ScrollViewReader
中,这似乎只有在使用数组填充 List
时才有效。当我使用 CoreData
的 FetchedResults
填充列表时,List
由于某种原因不滚动。
var array = Array(0...100)
private var items: FetchedResults<Item>
NavigationView {
ScrollViewReader { (proxy: ScrollViewProxy) in
List{
ForEach(items) {item in
Text(item.text!)
}
}
Button("Tap to scroll") {
proxy.scrollTo(10, anchor: .top)
}
}
}
在这里,如果我使用 items
它不会滚动,但是当我将 items
替换为 array
时,列表会按预期滚动。
scrollTo()
通过接收标识符而不是索引来工作。
使用 array
有效,因为 10
包含在 array
中,但 10
无法匹配 item
.
我建议您向您的对象添加一个 ID 字符串 属性(我认为您甚至可以使用 object.uriRepresentation()
)使用该标识符标记您的视图,现在您将能够使用scrollTo
.
private var items: FetchedResults<Item>
NavigationView {
ScrollViewReader { (proxy: ScrollViewProxy) in
List{
ForEach(items) {item in
Text(item.text!)
.id(item.id)
}
}
Button("Tap to scroll") {
proxy.scrollTo(items[10].id, anchor: .top)
}
}
}
}
我试图在点击按钮时滚动到 List
的底部。我试过将 List
放在 ScrollViewReader
中,这似乎只有在使用数组填充 List
时才有效。当我使用 CoreData
的 FetchedResults
填充列表时,List
由于某种原因不滚动。
var array = Array(0...100)
private var items: FetchedResults<Item>
NavigationView {
ScrollViewReader { (proxy: ScrollViewProxy) in
List{
ForEach(items) {item in
Text(item.text!)
}
}
Button("Tap to scroll") {
proxy.scrollTo(10, anchor: .top)
}
}
}
在这里,如果我使用 items
它不会滚动,但是当我将 items
替换为 array
时,列表会按预期滚动。
scrollTo()
通过接收标识符而不是索引来工作。
使用 array
有效,因为 10
包含在 array
中,但 10
无法匹配 item
.
我建议您向您的对象添加一个 ID 字符串 属性(我认为您甚至可以使用 object.uriRepresentation()
)使用该标识符标记您的视图,现在您将能够使用scrollTo
.
private var items: FetchedResults<Item>
NavigationView {
ScrollViewReader { (proxy: ScrollViewProxy) in
List{
ForEach(items) {item in
Text(item.text!)
.id(item.id)
}
}
Button("Tap to scroll") {
proxy.scrollTo(items[10].id, anchor: .top)
}
}
}
}