iOS 15小组件中多色SF Symbols变为黑色问题如何解决?
问题原因
iOS 15调整了小组件内SF Symbols的默认渲染策略,默认会继承小组件全局前景色,原生多色SF Symbols会被强制覆盖为单色显示,iOS 14无该逻辑所以渲染正常。
修复方案
- 创建UIImage时显式指定渲染模式为
alwaysOriginal,保留原图的多色配置,修改后代码如下:
if let uiImage = UIImage(systemName: getIconName(iconId: iconId))?.withRenderingMode(.alwaysOriginal) { Image(uiImage: uiImage) .resizable() .scaledToFit() .frame(width: 20) }
如果使用纯SwiftUI的Image初始化(无需UIImage桥接),也可以直接添加.symbolRenderingMode(.original)修饰符实现同样效果。
- 检查代码中是否给Image或者其父视图添加了
foregroundColor修饰符,全局前景色会覆盖SF Symbols的原生多色,需要移除针对图标区域的全局前景色设置。 - 确认使用的SF Symbols本身支持多色渲染,且项目中导入的SF Symbols资源包没有开启强制单色配置。
效果对比
iOS 14 正常多色效果:
iOS 15 异常黑色效果:
内容的提问来源于stack exchange,提问作者Palejandro
相关产品推荐
相关产品推荐

