You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不显示对应视图本身,仅绘制出圆形阴影

解决方案

你的代码不生效的核心原因是:SwiftUI 的阴影是基于视图的不透明像素生成的,fill(Color.clear) 会让整个圆形的 alpha 通道值为 0,系统会判定没有需要生成阴影的内容,因此不会渲染阴影。

下面是两个可直接落地的兼容方案:

方案1:使用极低不透明度的填充色(全版本兼容,优先推荐)

只要将填充色替换为透明度极低的颜色,人眼完全无法识别填充,但系统会识别到可渲染的不透明内容,正常生成阴影:

Circle()
    // 0.0001 透明度视觉上完全透明,不影响其他图层效果
    .fill(Color.white.opacity(0.0001))
    .shadow(color: .red, radius: 10)

该方案无额外性能开销,兼容所有支持 SwiftUI 的系统版本,适合绝大多数场景。

方案2:使用混合模式完全移除填充(适合零填充透明度要求的场景)

如果需要严格保证填充部分的透明度为 100%,可以用 blendMode 只保留阴影、移除填充内容:

ZStack {
    Circle()
        .fill(.white)
        .shadow(color: .red, radius: 10)
        .blendMode(.destinationOut)
}
.compositingGroup()

该方案需要用 ZStack 包裹并开启 compositingGroup,避免混合模式影响父视图内的其他元素。


内容的提问来源于stack exchange,提问作者Sebastian Boldt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 07:54:02