在SwiftUI中使用列表和可识别协议使ScrollViewReader滚动到项目



我不能使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()的实际模型。

匹配的标识符类型必须相同,因此您的idOptional,那么在scrollTo中它也应该是可选的,如

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

在Xcode 13/iOS 15上测试复制快照

相关内容

  • 没有找到相关文章

最新更新