在 SwiftUI 中滚动到填充有 CoreData 的列表底部

Scroll to bottom of a list populated with CoreData in SwiftUI

我试图在点击按钮时滚动到 List 的底部。我试过将 List 放在 ScrollViewReader 中,这似乎只有在使用数组填充 List 时才有效。当我使用 CoreDataFetchedResults 填充列表时,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)
            }
        }
    }
}