我不能使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)
}
}
}
}
}
我尝试使用.id()
来识别每一行/按钮,但没有成功。我不知道我是否需要id()
,因为ForEach()
使用国家的可识别协议来识别每个项目。
一个重要的事情:国家不是按照其变量id的逻辑顺序(1,2,3…)显示的。但是,即使使用id(country.id)
修饰符,它也不会滚动到列表的右行/按钮。
我们可以在网上找到的大多数例子都是使用简单的索引迭代行,而不是使用struct()的实际模型。
匹配的标识符类型必须相同,因此您的id
是Optional
,那么在scrollTo
中它也应该是可选的,如
Button(action: {
proxy.scrollTo(Optional(Int64(38))) // << here !!
})
在Xcode 13/iOS 15上测试复制快照