I can't make ScrollViewReader to scroll on my List(). I have read many discussions such this or this
I use a model with Identifiable protocol and id as Int:
struct Country: Identifiable, Codable, Hashable {
// database fields
var id: Int64?
var name: String
}
My view is currently like that:
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)
}
}
}
}
}
I tried using an .id()
to identify each row/button without success too. I don't know if I need id()
as ForEach()
use the identifiable protocol of the country to identify each item.
One important thing: countries are NOT displayed in the logical order (1,2,3...) of their var id. But even with the id(country.id)
modifier, it never scroll to the right row/button of the list.
Most of examples we can find on the web use a simple index iteration for rows, and not a real model with struct().
Types of matched identifiers must be the same, so as your
id
isOptional
then inscrollTo
it should be optional as well, likeTested with your replicated snapshot on Xcode 13 / iOS 15