是否可以在 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 状态栏中放置矢量(或字体)图标?的主要内容,如果未能解决你的问题,请参考以下文章
Uniapp 动态修改状态栏导航栏背景色字体颜色插件 Ba-AppBar