我尝试在一个通过程序调用的视图中,使 SwiftUI 的
正如你所看到的,在
如果我将每个
P.S. 我听说过UIKit,但我对它一无所知,现在适合使用它吗?
ScrollView
在按下按钮时滚动到抽象视图中的某一点。以下是我的代码:struct AbstractedView: View {
@Namespace var view2ID
var body: some View {
ScrollView {
VStack {
View1()
View2()
.id(view2ID)
View3()
}
}
}
func scrollToView2(_ proxy: ScrollViewProxy) {
proxy.scrollTo(view2ID, anchor: .topTrailing)
}
}
正如你所看到的,在
ScrollViewReader
中调用scrollToView2()
时,AbstractedView
将滚动到view2ID
。 我在另一个视图中以编程方式创建了多个AbstractedView
:struct HigherView: View {
var numAbstractedViewsToMake: Int
var body: some View {
VStack {
HStack {
ForEach (0..<numAbstractedViewsToMake, id: \.self) { _ in
AbstractedView()
}
}
Text("button")
.onTapGesture {
/* call each AbstractedView.scrollToView2()
}
}
}
}
如果我将每个
AbstractedView
与一个ScrollViewReader
一起存储在HigherView
结构内的数组中,这样做可以吗?我感觉应该有更好的方法来实现这个,只是不知道该如何做。由于我对Swift还很新,所以非常感谢您的帮助。P.S. 我听说过UIKit,但我对它一无所知,现在适合使用它吗?
View
上“调用函数”有些违反 SwiftUI 的原则。如果您需要AbstractedView
响应某些状态更改,请将状态存储在父视图 (HigherView
) 中,并通过 props 向下传递。 - jnpdxScrollView
在状态变化时调用scrollToView2()
。 - Randy.OnChange(of:)
修饰符,但是我无法弄清楚在这种情况下如何使用它。 - Randy