我有以下代码:
struct ViewA: View {
var body: some View {
Rectangle()
.fill(Color(.yellow))
}
}
struct ViewB: View {
var body: some View {
Rectangle()
.fill(Color(.white))
}
}
struct ViewC: View {
var body: some View {
Rectangle()
.fill(Color(.blue))
}
}
struct TestView: View {
var body: some View {
GeometryReader { geo in
VStack(spacing: 0) {
ViewA()
.frame(width: geo.size.width, height: geo.size.width/4, alignment: .center)
.shadow(color: .black, radius: 10, x: 0, y: 10)
ViewB()
ViewC()
.frame(width: geo.size.width, height: 100, alignment: .center)
.shadow(color: .black, radius: 10, x: 0, y: 0)
.opacity(0.8)
}
}
}
}
它画:
底部蓝底白字视图(ViewC 覆盖 ViewB)的阴影出现。 我希望黄色视图 (ViewA) 在白色视图上投射阴影。
我希望白色视图看起来就像位于顶视图(黄色)和底视图(蓝色)下方。
我不知道如何组织视图,以便顶视图也会在中间视图上留下阴影。
我该如何实现这个目标?
您可以将 zindex 修饰符应用于 ViewA。例如.zIndex(.infinity)。它将把 ViewA 置于一切之上。 https://developer.apple.com/documentation/swiftui/view/zindex(_:)
如果将视图放在
ZStack
中,其中 ViewB 位于 ViewA 和 ViewC 后面,您将看到阴影:
GeometryReader { geo in
ZStack {
ViewB()
VStack(spacing: 0) {
ViewA()
.frame(
width: geo.size.width,
height: geo.size.width/4,
alignment: .center)
.shadow(
color: .black,
radius: 10,
x: 0, y: 0)
Spacer()
ViewC()
.frame(
width: geo.size.width,
height: 100,
alignment: .center)
.shadow(
color: .black,
radius: 10,
x: 0, y: 0)
.opacity(0.8)
}
}
}