【问题标题】:Scroll to bottom of a list populated with CoreData in SwiftUI在 SwiftUI 中滚动到填充有 CoreData 的列表底部
【发布时间】:2021-12-24 17:03:51
【问题描述】:

点击按钮时,我试图滚动到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 时,列表会按预期滚动。

【问题讨论】:

    标签: arrays swift swiftui swiftui-list swiftui-scrollview


    【解决方案1】:

    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)
                }
            }
        }
    }
    

    【讨论】:

    • 您甚至不需要使用.idproxy.scrollTo(items[10], anchor: .top) 的工作原理与视图已经在跟踪对象一样好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-23
    • 1970-01-01
    • 2020-01-19
    • 2020-02-11
    • 2012-10-22
    • 1970-01-01
    • 2022-01-22
    相关资源
    最近更新 更多