如何在iOS应用程序中包含应用程序图标图像?

16

我有一个标准的iOS应用,其中包含在Assets中的标准应用程序图标。

我想在应用程序内显示应用程序图标(使用SwiftUI)。请注意,我并不是在问如何设置应用程序图标或动态更改图标。我只想在应用程序自己的设置视图中显示应用程序图标。

似乎应该像其他任何资源一样处理App Icon资产,并且可以使用以下方式将其包含在内(请注意,默认图标命名中的App和Icon之间没有空格):

Image("AppIcon")

我也尝试着进行实验,

Image("icon_60pt@3x.png") // Pick out a specific icon by filename
Image("icon_60pt@3x") // Maybe it assumes it's a .png
Image("icon_60pt") // Maybe it auto picks most appropriate resolution, like UIKit

......但这些方法都行不通。

我该如何在应用程序中包含应用程序自己的图标,而无需将其复制为单独的Image Set(我已经尝试过这样做,并且可以实现)。

谢谢。


1
使用“AppIcon”时,请使用不同的分辨率。 看看这个 - JeanR
@JeanR 根据链接线程上的评论,指定大小不再起作用(对我也不起作用),但还是谢谢。 - Snips
2个回答

20

如果应用程序图标针对所使用的设备正确设置(例如,iPhone上的iPhone图标等),则以下内容有效。

注意:应用程序图标的大小必须完全匹配!

使用Xcode 11.4进行测试

demo1

demo2

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

这个可行,@JeanR 还说明了如何使用特定的分辨率,所以非常好,谢谢。 - Snips
2
这个可以工作,但我无法加载AppIcon-1和其他类似的图标... - Ahmadreza
1
@JeanR的在预览中不起作用,但这个可以。 - Viktor Sec
5
而且,由于搜索可能会导致此处,对于macOS,请将uiImage:UIImage替换为nsImage:NSImage - Neil E. Pearson

8
这有效:
extension Bundle {
    var iconFileName: String? {
        guard let icons = infoDictionary?["CFBundleIcons"] as? [String: Any],
              let primaryIcon = icons["CFBundlePrimaryIcon"] as? [String: Any],
              let iconFiles = primaryIcon["CFBundleIconFiles"] as? [String],
              let iconFileName = iconFiles.last
        else { return nil }
        return iconFileName
    }
}

struct AppIcon: View {
    var body: some View {
        Bundle.main.iconFileName
            .flatMap { UIImage(named: $0) }
            .map { Image(uiImage: $0) }
    }
}

您随后可以在任何视图中使用此内容:

AppIcon()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接