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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 22:42:03