【问题标题】:NSMenu renders incorrectly, goes transparentNSMenu 渲染不正确,变得透明
【发布时间】:2018-05-20 12:42:03
【问题描述】:

我的菜单栏应用出现间歇性渲染问题。每当我从菜单打开应用程序时,它都可以正常工作,但有时当应用程序运行时,我从停靠栏/启动板单击应用程序图标时,我会得到带有文本的菜单这种奇怪的布局。当我点击应用程序显示的NSUserNotification 时,也会发生这种情况。我用谷歌搜索了很多,但我找不到任何关于此类问题的参考。

重现步骤:

  1. 打开应用
  2. 再次单击启动板中的应用图标

这种情况只发生一次,此后问题无法重现。

这是菜单的外观:

不正确的菜单:

这是我的 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
    }

}

我有一个用于菜单的控制器,它调用一些呈现实际菜单的函数

@IBOutlet weak var statusMenu: NSMenu!
let statusItem = NSStatusBar.system.statusItem(withLength: CGFloat(70))

override func awakeFromNib() {
    statusItem.menu = statusMenu

    updateTitle()
    setupMenu()
    renderMenu()
}

【问题讨论】:

  • 除非您提供菜单设置和渲染的代码,否则您的问题是一个黑匣子。你的背景是透明的,文字是灰色的还是什么问题?
  • @battlmonstr 我添加了更多细节,菜单在 99% 的情况下都能正常呈现。很少,当我点击通知/应用程序图标时,我会看到一个奇怪的菜单轮廓。
  • 贴出 setupMenu/renderMenu 的代码,特别是你如何渲染背景。
  • 没有渲染背景的代码,我只是用statusMenu.addItem(item)添加了几个NSMenuItem,菜单是渲染默认的深色主题背景。
  • 当菜单即将显示时,您可以尝试挂钩事件并强制重绘吗?喜欢stackoverflow.com/questions/19934483/…

标签: xcode macos nsmenu


【解决方案1】:

我的一个应用程序遇到了这个问题。问题是菜单激活时我的应用程序没有进入前台。我通过实施解决了它:

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

【讨论】:

    猜你喜欢
    • 2011-04-07
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    • 2014-08-07
    • 2010-11-21
    • 2018-01-27
    • 2016-08-25
    • 1970-01-01
    相关资源
    最近更新 更多