iOS 16 Widget下Apple Watch complications图片加载失败求助
解决Complication图片归档尺寸报错问题
问题详情
使用代码设置Complication内图片:
Image("sticker5") .resizable() .frame(width: 47, height: 47) .scaledToFill()
其中sticker5为94px×94px图片,符合官方推荐尺寸,但出现报错日志:
ComplicationsExtension[403:17806] [archiving] Widget archival failed due to image being too large [2] - (94, 94).
希望保留高像素图片以保证显示效果,解决该报错。
可行解决方案
方案1:用ImageRenderer预渲染到目标逻辑尺寸
系统归档时检测的是原始图片的像素尺寸,而非SwiftUI渲染后的显示尺寸。通过ImageRenderer提前将图片渲染为逻辑47×47的大小(对应Retina屏的94×94像素,不会损失清晰度),可绕过系统的尺寸判定。代码示例:
import SwiftUI struct YourComplicationView: View { private let processedImage: Image init() { let originalImg = Image("sticker5") // 按目标显示尺寸构建渲染内容 let renderer = ImageRenderer(content: originalImg .resizable() .scaledToFill() .frame(width: 47, height: 47)) // 匹配屏幕缩放比,保证渲染出Retina分辨率的图片 renderer.scale = UIScreen.main.scale if let uiImg = renderer.uiImage { processedImage = Image(uiImage: uiImg) } else { // 渲染失败时用原图兜底 processedImage = originalImg } } var body: some View { processedImage .frame(width: 47, height: 47) } }
方案2:压缩图片文件体积
部分情况下,即使像素尺寸符合要求,图片文件体积过大也会触发报错。可使用Mac预览App打开图片,导出时选择「压缩」选项,或转换为WebP格式,在不降低像素的前提下缩小文件大小。
方案3:检查Complication配置
确认Complication的代码中没有额外的图片缓存或自定义归档逻辑,避免系统误判图片尺寸信息。
内容的提问来源于stack exchange,提问作者David Wang
相关产品推荐
相关产品推荐

