如何解决当另一个视图处于活动状态时如何模糊背景?
当第二个视图处于活动状态时,我尝试模糊第一个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)
}
}
}
}
解决方法
积累模糊效果是因为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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。