是否可以在 macOS 状态栏中放置矢量(或字体)图标?

Posted

技术标签:

【中文标题】是否可以在 macOS 状态栏中放置矢量(或字体)图标?【英文标题】:Is it possible to place a vector (or font) icon in macOS status bar? 【发布时间】:2020-04-06 15:50:58 【问题描述】:

我使用 Swift 5 和 SwiftUI(如果重要的话),我想在状态栏中的文本旁边放置一个矢量图标(或字体图标,这对我来说是一个更好的选择)。

据我所知,我找到了一个示例,它创建了一个按钮并将其放在状态栏中。

    self.statusBarItem = NSStatusBar.system.statusItem(withLength: CGFloat(NSStatusItem.variableLength))
    if let button = self.statusBarItem.button 
        button.image = NSImage(named: "Icon")
        button.title = "MyText"
        button.action = #selector(togglePopover(_:))
    

但是,据我了解,使用光栅图像不是一个好主意,因为它的大小可能会因许多因素而异。而且,通常情况下,我会使用字体图标来处理这些事情,这几乎可以在任何地方完美运行。

或者,可能,可以将 SwiftUI 视图插入到状态栏项中?

【问题讨论】:

您是在问是否可以将矢量 AppIcon 用于您的应用程序或仅使用矢量图像资产? 【参考方案1】:

这是 Apple 对此的说法

/*
 Custom views should not be set on a status item.
 The button property with a template image will allow proper styling of 
 the status item in various states and contexts and should be used instead.
 */
@property (nullable, strong) NSView *view API_DEPRECATED("Use the standard button property instead", macos(10.0,10.14));

如果你仍然想要这个,那么 NSButton 是一个视图,你总是可以用你的自定义内容向它添加子视图。不过我会建议走正式的方式。

【讨论】:

是的,我已经看到了这个建议并决定遵循它。现在我正在考虑制作我自己的字体,从系统默认字体(据我了解为“旧金山”)嵌套并添加我的图标做一些扩展区域。但它看起来也不是一个好的解决方案......【参考方案2】:

最后,我想出了这个方法:

我制作了一个自定义字体,它继承自标准 San Francisco 字体并在 Unicode 区域中包含必要的图标,所以现在我可以在那里输入任何文本和必要的图标。我用Icomoon网站制作了字体。

此外,还有a lot of icons embedded in San Francisco font,您无需任何额外工作即可使用(您只需从应用程序复制符号并将其粘贴到按钮的“标题”属性)。

【讨论】:

以上是关于是否可以在 macOS 状态栏中放置矢量(或字体)图标?的主要内容,如果未能解决你的问题,请参考以下文章

如何在wxpython中状态栏的特定字段中放置进度条?

Uniapp 动态修改状态栏导航栏背景色字体颜色插件 Ba-AppBar

Uniapp 动态修改状态栏导航栏背景色字体颜色插件 Ba-AppBar

如何将动画图标添加到 OS X 状态栏?

Mac 状态栏项目但不在 Dock 上

如何在窗口小部件中放置多个字体