在 SwiftUI 中,如果使用了 AnyView
包装视图,它将阻止视图的更新。这通常发生在使用条件语句或循环时。以下是一个使用 AnyView
的例子:
struct ContentView: View {
@State private var isShowingText = false
var body: some View {
VStack {
if isShowingText {
Text("Hello, World!")
} else {
AnyView(EmptyView())
}
Button("Toggle") {
self.isShowingText.toggle()
}
}
}
}
在上面的示例中,当 isShowingText
为 true
时,将显示文本 "Hello, World!",否则将显示空视图。但是,由于使用了 AnyView
包装空视图,它会阻止视图的更新。因此,无论 isShowingText
的值如何变化,都不会触发视图的更新。
要解决这个问题,可以避免使用 AnyView
,而是使用一个条件语句来显示不同的视图。以下是修改后的代码示例:
struct ContentView: View {
@State private var isShowingText = false
var body: some View {
VStack {
if isShowingText {
Text("Hello, World!")
} else {
EmptyView()
}
Button("Toggle") {
self.isShowingText.toggle()
}
}
}
}
这样,当 isShowingText
的值发生变化时,视图将根据条件来更新,并正确显示对应的视图。