【发布时间】:2021-03-30 15:33:48
【问题描述】:
在 SwiftUI 中有一种滚动到视图的方法。像这个例子:
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)
}
}
}
但我的用户界面并不是那么简单。我有一个视图和视图模型。也有一些延迟生成的视图。
在加载所有视图后,我需要滚动到某个元素。
Do it after 不是问题,但是如何从 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() { }
}
如何在不刷新页面的情况下从我的model 执行pageScroller.scrollTo(pageIndex, anchor: .top)?
或者如何通过一些事件从模型中执行一些视图函数?
我也不需要在滚动(!)之前刷新页面 - 就像第一个示例中的按钮单击一样。
【问题讨论】:
-
您想知道如何滚动和使用pageScroller吗?
-
@swiftPunk 我需要知道如何从我的
viewModel拨打pageScroller.scrollTo(pageIndex, anchor: .top)