2016-08-24 46 views
0

我試圖在系統狀態欄中顯示一個OS X應用程序statusItem,並且除了標題被切斷之外,所有事情都成功了。我初始化一切都像這樣:SystemStatusBar statusItem標題在OS X上被簡短刪除

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的圖標,它會起作用並顯示整個標題,但是當我重新添加圖標時,它會再次切斷。這兩個(圖標和標題)共存嗎?我回顧了一些蘋果文檔,可能錯過了解釋這一點的關鍵部分。

謝謝你們。

回答

0

一個選擇是將自定義視圖分配給您的statusBarItem,並在該視圖的類覆蓋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類。