当第二个视图处于活动状态时,我尝试模糊第一个VStack。 但是这样做时,每次点击“启用模糊”按钮的背景颜色都会改变。 我不确定我在哪里出问题了,想知道是否有更好的方法可以做到这一点。
struct ContentView: View {
@State private var showWindow = false
var body: some View {
ZStack{
VStack{
Button(action: {self.showWindow.toggle()}){
Text("Enable Blur")
.foregroundColor(.white)
.padding()
.background(Color.black)
.cornerRadius(5)
}
}.blur(radius: showWindow ? 5 : 0)
VStack{
if(showWindow){
DatePickerView(showWindow: self.$showWindow)
}
}
}
}
}
struct DatePickerView: View {
@Binding var showWindow: Bool
var body: some View{
VStack{
Button(action: {self.showWindow.toggle()}){
Text("Done").foregroundColor(.white)
}
}
}
}
答案 0 :(得分:1)
积累模糊效果是因为SwiftUI渲染引擎未确定VStack内容是否已更改,因此将其缓存的渲染变体用于下一个重绘。等等。
要解决此问题,我们需要将VStack标记为刷新。这是可能的解决方案。经过Xcode 11.4 / iOS 13.4的测试
VStack{
Button(action: {self.showWindow.toggle()}){
Text("Enable Blur")
.foregroundColor(.white)
.padding()
.background(Color.black)
.cornerRadius(5)
}
}.id(showWindow) // << here !!
.blur(radius: showWindow ? 5 : 0)