There is a way in SwiftUI to scroll to a view. like this example:
ScrollView {
ScrollViewReader { value in
Button("Jump to #8") {
// we scroll on button press
value.scrollTo(8, anchor: .top)
}
.padding()
ForEach(0..<100) { i in
Text("Example \(i)")
.font(.title)
.frame(width: 200, height: 200)
.background(colors[i % colors.count])
// We need to set ID for scrolling
.id(i)
}
}
}
But my UI is not so simple. I have a View and ViewModel. Also some views generated with some delay.
I need to scroll to some element after all views will be loaded.
Do it after is not a problem, but how to scroll to needed element programmatically from ViewModel?
@ObservedObject var model: someViewModel
var body: some View {
ScrollView {
ScrollViewReader { pageScroller in
ForEach(0..<100) { i in
Text("Example \(i)")
.frame(width: 200, height: 200)
.background(colors[i % colors.count])
.id(i)
}
}
}
.frame(height: 350)
}
class someViewModel: ObservableObject {
@Published var scrollToPageName = 4
var needToScroll = false
init() { }
}
How to execute pageScroller.scrollTo(pageIndex, anchor: .top)
from my model
WITHOUT page refresh?
Or how to execute some view func from model by some event?
Also I need to not do refresh of the page before the scroll(!) - just like on button click from first example.