SwiftUI视图切换异常:点击C按钮无法跳转至FinalView
SwiftUI视图切换不触发的问题分析与解决
问题根源
你把FinalView嵌套定义在了ContentView结构体内部。SwiftUI依赖视图类型的差异来触发视图树的更新,嵌套的结构体类型会被SwiftUI视为ContentView的关联类型,当你点击C按钮将c设为true时,SwiftUI无法正确识别到需要渲染的视图类型发生了变化,因此不会立即触发视图切换。只有当另一个@State变量a_or_b改变时,整个body才会重新计算,此时才会检测到c的状态变化,进而切换到FinalView。
解决方法
将FinalView从ContentView内部移出,作为独立的结构体定义即可。修改后的代码如下:
struct ContentView: View { @State private var c = false @State private var a_or_b: letter? enum letter { case a; case b } var body: some View { if c == true { FinalView(c: $c) } else { VStack { Text("First View") Button(action: { a_or_b = .a }) { Text("A") } Button(action: { a_or_b = .b }) { Text("B") } Button(action: { c = true }) { Text("C") } } } } } struct FinalView: View { @Binding var c: Bool var body: some View { Text("Second View!") } }
内容的提问来源于stack exchange,提问作者MTJ
相关产品推荐
相关产品推荐

