NSMenu呈现错误,变得透明

时间:2018-05-20 12:42:03

标签: xcode macos nsmenu

我的菜单栏应用程序存在间歇性渲染问题。每当我从菜单中打开应用程序时,它都可以正常工作,但有时当应用程序运行时,我点击了Dock / Launchpad中的应用程序图标,我得到了带有文本的菜单的这种奇怪的布局。当我点击应用程序显示的NSUserNotification时,也会发生这种情况。我搜索了很多,但我找不到任何关于这个问题的提法。

重现的步骤:

  1. 打开应用
  2. 再次点击启动板上的应用图标
  3. 这种情况只发生一次,此后问题无法再现。

    这是菜单的外观:

    Correct Menu

    菜单不正确:

    Transparent NSMenu

    这是我的AppDelegate

    import Cocoa
    import Fabric
    import Crashlytics
    
    @NSApplicationMain
    class AppDelegate: NSObject, NSApplicationDelegate, NSUserNotificationCenterDelegate {
    
        func applicationDidFinishLaunching(_ aNotification: Notification) {
            NSUserNotificationCenter.default.delegate = self
            UserDefaults.standard.set(true, forKey: "NSApplicationCrashOnExceptions")
            Fabric.with([Crashlytics.self])
        }
    
        func applicationWillTerminate(_ aNotification: Notification) {
            // Insert code here to tear down your application
        }
    
        func userNotificationCenter(_ center: NSUserNotificationCenter, shouldPresent notification: NSUserNotification) -> Bool {
            return true
        }
    
    }
    

    我有一个Menu的控制器,它调用一些渲染实际菜单的函数

    @IBOutlet weak var statusMenu: NSMenu!
    let statusItem = NSStatusBar.system.statusItem(withLength: CGFloat(70))
    
    override func awakeFromNib() {
        statusItem.menu = statusMenu
    
        updateTitle()
        setupMenu()
        renderMenu()
    }
    

1 个答案:

答案 0 :(得分:0)

我的一个应用出现了这个问题。问题是菜单激活时我的应用程序没有出现在前台。我通过实施解决了该问题:

- (void) menuWillOpen:(NSMenu *) aMenu
{
    [NSApp activateIgnoringOtherApps:YES];
}