我正在尝试在 macOS 系统托盘中写入两行文本,非常类似于 iStat pro 对网络事件所做的操作:
我知道我必须子类化 NSView 才能做到这一点,但我无法让它工作,即使是一行:
class CustomView:NSView {
override func draw(_ dirtyRect: NSRect) {
let text: NSString = "my string"
let textRect: NSRect = NSMakeRect(0, 0, 100, 20)
text.draw(in: textRect)
}
}
然后:
let statusBar = NSStatusBar.system
statusItem = statusBar.statusItem(withLength: 100)
let view = CustomView()
view.wantsLayer = true
statusItem.button?.addSubview(view)
我在 stackoverflow 上找到了其他线程:
- OS X Status Bar Application with a title in two lines : 它在 Objective C 中,但我也无法让它工作
- How to show two row of text in a menu bar app in mac os :不幸的是,解释对我来说不够详细
最佳答案
怀疑这就是您正在寻找的内容,但这会将两行文本放入状态项中:
import Cocoa
let app = NSApplication.shared
let statusItem = NSStatusBar.system.statusItem(withLength:-1)
statusItem.button?.font = NSFont(name:"Menlo Bold", size: 10.0)
statusItem.button!.title = "one\ntwo"
app.run()
它仍然只是一个按钮,我不知道你将如何分离每个项目的选择。也许下拉菜单会更好?
关于swift - 如何在 NSView 子类中绘制两行文本? (macOS 系统托盘),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61557717/