Сделайте ScrollViewReader прокруткой до элемента, используя список и идентифицируемый протокол в SwiftUI.
Я не могу заставить ScrollViewReader прокручивать мой список (). Я прочитал много дискуссий , например это или это
Я использую модель с протоколом Identifiable и идентификатором 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()
используйте протокол идентификации страны для идентификации каждого предмета.
Одна важная вещь: страны НЕ отображаются в логическом порядке (1,2,3...) их идентификатора переменной. Но даже с
id(country.id)
модификатор, он никогда не прокручивается до правой строки / кнопки списка.
В большинстве примеров, которые мы можем найти в Интернете, используется простая итерация индекса для строк, а не реальная модель с struct ().
1 ответ
Типы совпадающих идентификаторов должны быть такими же, как и ваш
id
является
Optional
затем в
scrollTo
он также должен быть необязательным, например
Button(action: {
proxy.scrollTo(Optional(Int64(38))) // << here !!
})
Протестировано с вашим реплицированным снимком на Xcode 13 / iOS 15