iOS 18 ControlWidget自定义图标不显示问题求助
iOS 18 锁屏ControlWidget自定义图标显示占位符问题
我用以下代码创建了锁屏启动ControlWidget:
@available(iOS 18.0, *) struct LockScreenAppLaunchWidget: ControlWidget { var body: some ControlWidgetConfiguration { StaticControlConfiguration(kind: "com.example.lockscreenlauncher") { ControlWidgetButton(action: LaunchAppIntent()) { Label { Text("AppName") } icon: { Image("custom_icon").renderingMode(.original).resizable() } } } .displayName("Open app") } }
已创建Media.xcassets存储自定义图标,且关联了WidgetExtension和主APP目标,但运行后控件图标显示为带问号的虚线占位符。测试发现:
Label("AppName", systemImage: "heart") // 正常显示 Label("AppName", image: "custom_icon") // 无法显示
解决步骤
- 检查图标资产的目标关联:点击
Media.xcassets里的custom_icon,右侧面板确认Target Membership勾选了WidgetExtension目标(仅关联整个资源文件可能不生效,需单独确认单个资产的关联状态)。 - 补充适配锁屏控件的图标尺寸:确保
custom_icon包含小尺寸版本(如16pt、24pt、32pt)及对应的@2x、@3x分辨率图,锁屏控件对小尺寸资源的依赖更高。 - 调整图标渲染模式:在Asset Catalog中把
custom_icon的Render As设置为Original Image,避免默认的模板模式导致图标显示异常。 - 清理缓存后重建:删除设备/模拟器上的APP和Widget,执行
Product > Clean Build Folder,再重新编译运行(锁屏Widget的缓存更新不及时是常见问题)。 - 验证名称拼写:确认代码中的
"custom_icon"和Asset Catalog里的资产名称完全一致(iOS对资源名称大小写敏感)。 - 尝试WidgetExtension独立资源:在WidgetExtension目标下新建专属Asset Catalog,将
custom_icon移入并仅关联该目标,再修改代码引用。
内容的提问来源于stack exchange,提问作者krosshj
相关产品推荐
相关产品推荐

