0

我不能让 ScrollViewReader 在我的 List() 上滚动。我读过很多这样这样的讨论

我使用具有可识别协议和 id 作为 Int 的模型:

struct Country: Identifiable, Codable, Hashable {

        // database fields
        var id: Int64?
        var name: String
}

我目前的看法是这样的:

            ScrollViewReader { proxy in
                    VStack {
                            Button(action: {
                                    proxy.scrollTo(38) // just a test
                            })
                            { Text("Jump to") }
                                 
                            List() {
                                    ForEach(countries) { country in

                                            Button (action: {
                                                    wine.countryId = country.id
                                                    // pop
                                                    self.mode.wrappedValue.dismiss()
                                            }) {
                                                    // cell content
                                                    HStack {
                                                            Image(country.flag).resizable().frame(width: 24.0, height: 24.0)
                                                            Text(country.name)
                                                    }
                                            }
                                            //.id(country.id)
                                       }
                                }
                        
                        }
                }
    }

我也尝试使用 an.id()来识别每一行/按钮,但没有成功。我不知道我是否需要id()使用ForEach()该国家/地区的可识别协议来识别每个项目。

一件重要的事情:国家不按其 var id 的逻辑顺序 (1,2,3...) 显示。但即使使用id(country.id)修饰符,它也永远不会滚动到列表的右行/按钮。

我们可以在网上找到的大多数示例都对行使用简单的索引迭代,而不是使用 struct() 的真实模型。

4

1 回答 1

2

匹配标识符的类型必须相同,因此您的idis Optionalthen inscrollTo它也应该是可选的,例如

Button(action: {
   proxy.scrollTo(Optional(Int64(38))) // << here !!
})

在 Xcode 13 / iOS 15 上使用您的复制快照进行测试

于 2021-10-19T08:40:35.243 回答