【问题标题】:How to show two row of text in a menu bar app in mac os如何在mac os的菜单栏应用程序中显示两行文本
【发布时间】:2017-05-02 13:36:39
【问题描述】:

您能否向我解释一下如何在 osx(使用 swift 3)上制作一个应用程序,仅在菜单栏中显示(没有 Dock 上的图标)两行文本,如下图所示?或者至少如何在菜单栏上显示文本?

OSX 菜单栏图片:

PS:我是 osx app dev 的新手,所以不要犹豫,非常冗长 ;)

【问题讨论】:

标签: swift macos swift3


【解决方案1】:
  • 这种应用称为菜单栏应用或menulet。
  • 无坞外观由Info.plist 中的键LSUIElement (1) 设置
  • 使用自定义NSView
  • 将视图作为子视图分配给NSStatusItem按钮的视图
  • drawRect中绘制文字

重要提示:使用自定义视图需要实现处理突出显示、鼠标单击和NSMenu 委托的所有方法。

这是一篇文章如何做到这一点,它在 Objective-C 中,但这可能是一个起点:
Adding a Custom View to an NSStatusItem

【讨论】:

    【解决方案2】:
    var statusBarItem: NSStatusItem?
    
    func applicationDidFinishLaunching(_ notification: Notification) {
        statusBarItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)
        if let button = self.statusBarItem?.button {
            let style = NSMutableParagraphStyle()
            style.maximumLineHeight = 10
            style.alignment = NSTextAlignment.left
            let attributes = [NSAttributedString.Key.paragraphStyle: style, NSAttributedString.Key.font: NSFont.systemFont(ofSize: 10.0), NSAttributedString.Key.baselineOffset: -5] as [NSAttributedString.Key : Any]
            let textString = "Line1\nLine2"
            let attributedTitle = NSAttributedString(string: textString, attributes: attributes)
            button.attributedTitle = attributedTitle
        }
    }
    

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    • 2015-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多