无法向 SwiftUI 视图添加内部阴影

问题描述 投票:0回答:1

我已经看到了有关此问题的各种问题,但似乎没有人回答在 SwiftUI 视图中使用内部阴影和投影。

假设一个视图(我用 Shape 子类

RoundRectangle
来表示)。因为它是一个 Shape,所以我可以像这样简单地添加内部阴影和投影:

#Preview {
    VStack {
        RoundedRectangle(cornerRadius: 10)
            // inner shadow
            .fill(.shadow(.inner(color: .white, radius: 1, y: -1)))
            .frame(width: .infinity, height: 100)
            // drop shadow
            .shadow(radius: 10)
        Spacer()
    }
    .background(.yellow)
    .padding()
}

上面的代码产生这样的结果: enter image description here

现在,如果有人有

Text
视图怎么办?可以简单地应用投影,但不能应用内部投影,因为
Text
不是
Shape
并且无法调用 .fill。我见过使用
.overlay
的解决方案,但这些解决方案采用类似
Rectangle
的形状。此外,他们假设形状的颜色不清晰(例如.红色或.蓝色)。

#Preview {
    VStack {
        Text("View")
            .background(.blue)
            .overlay(alignment: .center) {
                Rectangle()
                    .fill(.shadow(.inner(color: .white, radius: 1, y: -1)))
            }
            .frame(width: .infinity, height: 100)
        Spacer()
    }
    .background(.yellow)
    .padding()
}

事实上,这段特定代码中的覆盖并没有真正起作用:

enter image description here

那么,假设有任何 SwiftUI 视图,如何应用

.fill(.shadow(.inner(radius:)))
来创建内部阴影?

swiftui shadow
1个回答
0
投票

尝试将内部阴影添加到蓝色背景。

顺便说一句,

.infinity
作为
width
无效(控制台中有错误),但您可以将其用于
maxWidth

Text("View")
    .background(
        .blue
            .shadow(.inner(color: .white, radius: 1, y: -1))
     )
    .frame(maxWidth: .infinity)
    .frame(height: 100)

Screenshot

© www.soinside.com 2019 - 2024. All rights reserved.