0

我试图滚动到List点击按钮时的底部。我尝试将 a 放置List在 a 中ScrollViewReader,这似乎仅在List使用数组填充时才有效。CoreData当我使用's填充列表时FetchedResultsList由于某种原因不会滚动。

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它不会滚动,但是当我itemsarray列表替换时会按预期滚动。

4

1 回答 1

1

scrollTo()通过接收标识符而不是索引来工作。

usingarray有效,因为10包含在 中array,但10无法匹配item

我建议您将 ID String 属性添加到您的对象(我认为您甚至可以使用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)
            }
        }
    }
}
于 2021-11-12T10:35:22.857 回答