我需要在一个孩子的一个孩子超时后刷新ContentView。由于某些原因,此代码不起作用:
struct ContentView: View {
@State private var returnToHome: Bool = false
var body: some View {
TabView([
TabBarItem(view: HomeView(),
image: Image("home_icon"),
title: "home"),
TabBarItem(view: AskView(returnToHome: self.$returnToHome),
image: Image("ask_icon"),
title: "ask us"),
TabBarItem(view: JobsView(),
image: Image("jobs_icon"),
title: "jobs"),
TabBarItem(view: MeetingView(),
image: Image("meeting_icon"),
title: "meeting"),
TabBarItem(view: MoreView(),
image: Image("more_icon"),
title: "more")
])
}
}
struct AskView: View {
@Binding var returnToHome: Bool
var body: some View {
AskDone(returnToHome: self.$returnToHome)
}
}
struct AskDone: View {
@Binding var returnToHome: Bool
var body: some View {
Text("done!")
}
.onAppear {
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
self.returnToHome = true
}
}
}
}
执行了DispatchQueue中的代码,但它不会影响ContentView @State。我也尝试通过Binding,但是没有成功。可能是什么问题?
据我了解,“视图”的任何状态更改时,“主体”都应随时更新。我错了吗?
从理论上讲是可以的,但已正式宣布SwiftUI渲染引擎已进行了优化,以在视图层次结构未发生任何更改的情况下不进行任何不需要的重新构建/重新绘制,这实际上是非常好的。您的情况没有改变,因此没有更新。你必须加入一些依赖body
上returnToHome
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句