macOS 上的 SwiftUI,如何在按钮上使用自定义图像符号?

Osc*_*nco 4 macos swift swiftui

仔细阅读问题,这是一个 MAC 应用程序,系统名称在 mac os 上不可用

我正在尝试在 macOS 上使用 swiftUI 构建一个简单的应用程序,但是我在显示某些图标时遇到了一些问题。

我现在到处都读到你需要下载 SF Symbols 应用程序并自己导出符号才能使用它们,所以我这样做了,然后我将导出的符号添加到了.xcassets,现在我正在尝试创建一个带有图像,所以这里是代码:

import SwiftUI

struct ActionBar: View {

    var body: some View {
        HStack {
            Spacer()
            Button(action: {

            }) {
                Image("Plus")
                    .font(Font.system(size: 24, weight: .light))
                    .foregroundColor(Color.red)
                Text("Test")
            }
        }
        .frame(maxWidth: .infinity)
        .padding()
        .background(Color.init(red: 0.8, green: 0.8, blue: 0.8))
    }
}

struct ActionBar_Previews: PreviewProvider {
    static var previews: some View {
        ActionBar()
    }
}

Run Code Online (Sandbox Code Playgroud)

我尝试了很多变体,例如:

Image(nsImage: NSImage(name: "Plus"))
Run Code Online (Sandbox Code Playgroud)

但是那里的所有信息,包括苹果自己的文档,都只谈论 UIImage,据我所知,它是 UIKit 的一部分,它是 UI 框架的 iOS 版本,有人让它在 macOS 上工作吗?

非常感谢!

编辑:资产作为Image Symbol Set.

编辑 2:我刚刚遇到了这篇文章,它指出 SVG 支持是不稳定的……我尝试将 SVG 转换为 PNG,但 xcode 不接受 png 作为符号集……所以,我想这个功能只是简单地损坏了?这很糟糕……

Nik*_*Jon 6

在 MacOS 中,没有可用的 systemImages。但NSImage.Name提供了另一种选择。此链接显示了大多数 MacOS 系统默认图标。

这是一个例子NSImage.Name

Icon(NSImage.refreshTemplateName)
Run Code Online (Sandbox Code Playgroud)

以下是Icon视图定义:

struct Icon: View {
    var image: NSImage.Name
    var body: some View {
        Image(nsImage: NSImage(named: image)!)
            .renderingMode(.original)
            .resizable()
            .scaledToFit()
    }
    init(_ image: NSImage.Name){
        self.image = image
    }
}
Run Code Online (Sandbox Code Playgroud)

PSImage视图没有名为.font(). 请检查其文档以获取正确的语法。

编辑:您可以按照以下格式跳过额外的视图。

Image(nsImage: NSImage(name: NSImage.addTemplateName))
Run Code Online (Sandbox Code Playgroud)

NSImage.Names 的列表在这里