如何不显示对应视图本身,仅绘制出圆形阴影
解决方案
你的代码不生效的核心原因是: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
相关产品推荐
相关产品推荐

