使SwiftUI阴影在同级视图中不流血

使SwiftUI阴影在同级视图中不流血,swiftui,Swiftui,SwiftUI阴影与其他内部同级视图重叠: 有没有办法解决这个问题,并在这种情况下获得适当的阴影 示例视图: //迅捷游乐场 // https://github.com/ralfebert/SwiftUIPlayground/ 导入快捷键 结构阴影视图:视图{ var body:一些观点{ 颜色:黄色 .ignoresSafeArea() .overlay(self.scrollView,对齐:.bottom) } var scrollView:一些视图{ VStack{ ForEach(1…

SwiftUI阴影与其他内部同级视图重叠:

有没有办法解决这个问题,并在这种情况下获得适当的阴影

示例视图:

//迅捷游乐场
// https://github.com/ralfebert/SwiftUIPlayground/
导入快捷键
结构阴影视图:视图{
var body:一些观点{
颜色:黄色
.ignoresSafeArea()
.overlay(self.scrollView,对齐:.bottom)
}
var scrollView:一些视图{
VStack{
ForEach(1…3,id:\.self){in
颜色:白色
.框架(高度:100)
.转弯半径(10)
.阴影(颜色:颜色.红色,半径:30,x:0,y:0)
}
}
.padding()
.框架(高度:200,对齐:.顶部)
}
}

您可以使用
.compositingGroup()
然后应用阴影

各国:

合成组使此视图的上级视图中的合成效果(例如不透明度和混合模式)在渲染此视图之前生效

这意味着所有视图都与单独完成的阴影合成在一起,而不是阴影受其下方视图的影响

代码:

VStack{
ForEach(1…3,id:\.self){in
颜色:白色
.框架(高度:100)
.转弯半径(10)

//.shadow(颜色:color.red,半径:30,x:0,y:0)//您可以使用
.compositingGroup()
然后应用阴影

各国:

合成组使此视图的上级视图中的合成效果(例如不透明度和混合模式)在渲染此视图之前生效

这意味着所有视图都与单独完成的阴影合成在一起,而不是阴影受其下方视图的影响

代码:

VStack{
ForEach(1…3,id:\.self){in
颜色:白色
.框架(高度:100)
.转弯半径(10)

//.shadow(颜色:color.red,半径:30,x:0,y:0)//谢谢乔治,效果很好!我想知道.drawingGroup()或.compositingGroup()是否更快…@RalfEbert很好!我没有发现它们有什么不同,但我测试了多次:
.drawingGroup()
处理100个视图大约需要7.9秒。另一方面,
.compositingGroup()
处理100个视图需要7.3秒。为了获得相同的结果,我认为最好实际使用
.compositingGroup()
。谢谢乔治,这非常有效!我想知道是.drawingGroup()还是.compositingGroup()但是速度更快了…@RalfEbert说得好!我没有发现它们有什么不同,但我测试了多次:
.drawingGroup()
在100个视图中花费了大约7.9秒。另一方面,
.compositingGroup()
在100个视图中花费了7.3秒。为了获得相同的结果,我认为最好实际使用
.compositingGroup()
VStack {
    ForEach(1 ... 3, id: \.self) { _ in
        Color.white
            .frame(height: 100)
            .cornerRadius(10)
            // .shadow(color: Color.red, radius: 30, x: 0, y: 0)  // <- REMOVED
    }
}
.compositingGroup()  // <- ADDED
.shadow(color: Color.red, radius: 30, x: 0, y: 0)  // <- ADDED
.padding()
.frame(height: 200, alignment: .top)