gpt4 book ai didi

swift - OS X 上的 SystemStatusBar statusItem 标题被缩短

转载 作者:行者123 更新时间:2023-11-30 13:07:55 24 4
gpt4 key购买 nike

我正在尝试在系统状态栏中显示 OS X 应用程序 statusItem,除了标题被截断之外,一切都成功。我正在初始化一切,如下所示:

let statusItem = NSStatusBar.systemStatusBar().statusItemWithLength(-1)


func applicationDidFinishLaunching(aNotification: NSNotification) {
let icon = NSImage(named: "statusIcon")
icon?.template = true
statusItem.image = icon
statusItem.menu = statusMenu
statusItem.title = "This is a test title"
}

问题是 statusItem.title 的显示如下: enter image description here

正如您所看到的,我旁边的应用程序(iStatMenuBar)正在切断我的应用程序的标题(或正在发生类似的情况)

如果我注释掉 statusItem 的图标,它会起作用并显示整个标题,但是当我重新添加图标时,它会再次切断。有没有办法让两者(图标和标题)共存?我已经审阅了一些 Apple 文档,但可能错过了解释这一点的关键部分。

谢谢大家。

最佳答案

一种选择是为您的 statusBarItem 分配一个自定义 View ,并在该 View 的类中覆盖 drawRect(dirtyRect: NSRect) 例如

    private var icon:StatusMenuView?
let bar = NSStatusBar.systemStatusBar()
item = bar.statusItemWithLength(-1)

self.icon = StatusMenuView()
item!.view = icon

StatusMenuView 可能如下所示:

    // This is an edited copy & paste from one of my personal projects so it might be missing some code
class StatusMenuView:NSView {
private(set) var image: NSImage
private let titleString:NSString = "really long title..."

init() {
icon = NSImage(named: "someImage")!
let myWideStatusBarItemFrame = CGRectMake(0, 0, 180.0, NSStatusBar.systemStatusBar().thickness)
super.init(frame.rect)
}


override func drawRect(dirtyRect: NSRect)
{
self.item.drawStatusBarBackgroundInRect(dirtyRect, withHighlight: self.isSelected)

let size = self.image.size
let rect = CGRectMake(2, 2, size.width, size.height)

self.image.drawInRect(rect)


let titleRect = CGRectMake( 2 + size.width, dirtyRect.origin.y, 180.0 - size.width, size.height)
self.titleString.drawInRect(titleRect, withAttributes: nil)
}
}

现在,上述内容可能会改变您的事件处理,您需要在 StatusMenuView 类中处理 mouseDown。

关于swift - OS X 上的 SystemStatusBar statusItem 标题被缩短,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39112740/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com