在 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 的值发生变化时,视图将根据条件来更新,并正确显示对应的视图。