为什么SwiftUI的Image看不到AppIcon文件?

问题描述 投票:0回答:2

我注意到 SwiftUI 中有一个奇怪的怪癖。 如果我尝试使用以下命令从资产文件夹中获取应用程序图标(图标存在):

Image("AppIcon")

这不起作用。没有图像显示。话虽这么说,尽管使用同一行代码,资产文件夹中的所有其他图像都可以正常工作,但 AppIcon 除外。

如果我用这个:

Image(uiImage: (UIImage(named: "AppIcon"))! )

它工作得很好。应用程序图标显示。 有什么原因导致 Image 无法显示 AppIcon 资源吗?

ios xcode image swiftui assets
2个回答
1
投票

我还没有找到 Apple 的明确文档,但“AppIcon”资产似乎经常被阻止在图像名称空间之外。

解决方法是使用同一文件的副本创建一个单独的资产。

(当我对新功能进行原型设计时,我喜欢在现有目标中引用相同的图像。)


0
投票

我解决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
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.