【问题标题】:How do I include iOS App Icon image within the app itself?如何在应用程序本身中包含 iOS 应用程序图标图像?
【发布时间】:2020-09-15 17:24:25
【问题描述】:

我有一个标准的 iOS 应用,在资产中包含一个标准的应用图标。

我想在应用中显示应用图标(使用 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

...但这些都不起作用。

如何在应用程序中包含应用程序自己的图标,而不将其复制为单独的图像集(我已经尝试过,并且确实有效。)

谢谢。

【问题讨论】:

  • 对“AppIcon”使用不同的分辨率。 Check this out
  • @JeanR 根据对链接线程的评论,指定尺寸不再有效(它对我不起作用),但谢谢。

标签: ios swift swiftui


【解决方案1】:

以下工作如果为使用过的设备正确设置了应用程序图标(即 iPhone 的 iPhone 图标等)

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

使用 Xcode 11.4 测试

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

【讨论】:

  • 这行得通,@JeanR 添加了如何使用特定分辨率,所以很好,谢谢。
  • 这可行,但我无法加载 AppIcon-1 和更多这样的图标...
  • @JeanR's 在预览中不起作用,但这个起作用
【解决方案2】:

这行得通:

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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-29
    • 2016-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多