Swiftui 调用ScrollView';从观察者或外部视图滚动到
当用户选择一个选项卡时,我试图重置我的ScrollView。问题是所有教程都是针对嵌套在ScrollView中的按钮的。我的ScrollView与我需要点击以重置ScrollView的位置完全不同 我找到了这个教程- 但是我得到了一个错误“在范围内找不到代理”Swiftui 调用ScrollView';从观察者或外部视图滚动到,swiftui,Swiftui,当用户选择一个选项卡时,我试图重置我的ScrollView。问题是所有教程都是针对嵌套在ScrollView中的按钮的。我的ScrollView与我需要点击以重置ScrollView的位置完全不同 我找到了这个教程- 但是我得到了一个错误“在范围内找不到代理” 如果有人知道在视图之外设置ScrollView位置的更简单的实现,我很乐意听到。根据问题中的链接改编示例,您的代码可以如下所示: struct ContentView: View { @State private var scr
如果有人知道在视图之外设置ScrollView位置的更简单的实现,我很乐意听到。根据问题中的链接改编示例,您的代码可以如下所示:
struct ContentView: View {
@State private var scrollTarget: Int?
var body: some View {
Button("Reset") {
scrollTarget = 0
}
ScrollViewReader { proxy in
ScrollView {
VStack {
ForEach(0...50, id: \.self) {
Text("\($0)")
}
}
}
.onChange(of: scrollTarget) { target in
if let target = target {
scrollTarget = nil
withAnimation {
proxy.scrollTo(target)
}
}
}
}
}
}
如果需要,您可以将scrollTarget
移动到ObservableObject
并从视图外部调用它:
class GlobalObserver: ObservableObject {
@Published var scrollTarget: Int?
}
struct ContentView: View {
@EnvironmentObject var global: GlobalObserver
var body: some View {
ScrollViewReader { proxy in
ScrollView {
VStack {
ForEach(0...50, id: \.self) {
Text("\($0)")
}
}
}
.onChange(of: global.scrollTarget) { target in
if let target = target {
global.scrollTarget = nil
withAnimation {
proxy.scrollTo(target)
}
}
}
}
}
}
最终,我需要交换引起我最初问题的ScollView和ScrollViewReader,但这是一个完美的实现。我会将其标记为正确,这样其他人可以比我更快地解决此问题。非常感谢
class GlobalObserver: ObservableObject {
@Published var scrollTarget: Int?
}
struct ContentView: View {
@EnvironmentObject var global: GlobalObserver
var body: some View {
ScrollViewReader { proxy in
ScrollView {
VStack {
ForEach(0...50, id: \.self) {
Text("\($0)")
}
}
}
.onChange(of: global.scrollTarget) { target in
if let target = target {
global.scrollTarget = nil
withAnimation {
proxy.scrollTo(target)
}
}
}
}
}
}