我注意到 SwiftUI 中有一个奇怪的怪癖。 如果我尝试使用以下命令从资产文件夹中获取应用程序图标(图标存在):
Image("AppIcon")
这不起作用。没有图像显示。话虽这么说,尽管使用同一行代码,资产文件夹中的所有其他图像都可以正常工作,但 AppIcon 除外。
如果我用这个:
Image(uiImage: (UIImage(named: "AppIcon"))! )
它工作得很好。应用程序图标显示。 有什么原因导致 Image 无法显示 AppIcon 资源吗?
我还没有找到 Apple 的明确文档,但“AppIcon”资产似乎经常被阻止在图像名称空间之外。
解决方法是使用同一文件的副本创建一个单独的资产。
(当我对新功能进行原型设计时,我喜欢在现有目标中引用相同的图像。)
我解决AppIcon问题的解决方案
struct AppIconView: View {
var body: some View {
if let image = UIImage(named: appIcon()) {
Image(uiImage: image)
.resizable()
.aspectRatio(contentMode: .fit)
.clipShape(RoundedRectangle(cornerRadius: 10))
}
}
func appIcon() -> String {
let bundle = DIContainer.forceResolve(Bundle.self)
guard let icons = bundle.object(forInfoDictionaryKey: "CFBundleIcons") as? [String: Any],
let primaryIcon = icons["CFBundlePrimaryIcon"] as? [String: Any],
let iconFiles = primaryIcon["CFBundleIconFiles"] as? [String],
let iconFileName = iconFiles.last else {
fatalError("Could not find icons in bundle")
}
return iconFileName
}
}