NSMenu рендерит неправильно, идет прозрачно - PullRequest
0 голосов
/ 20 мая 2018

У меня есть приложение в строке меню, в котором периодически возникают проблемы с рендерингом.Всякий раз, когда я открываю приложение из меню, оно работает нормально, но иногда, когда приложение работает и я нажимаю на значок приложения на панели Dock / Launchpad, я получаю этот странный макет меню с текстом.Это также происходит в тот момент, когда я нажимаю NSUserNotification, отображаемое приложением.Я много гуглил, но не нашел ссылки на такую ​​проблему.

Шаги для воспроизведения:

  1. Откройте приложение
  2. Снова нажмитезначок приложения на панели запуска

Это происходит только один раз, после этого проблема не может быть воспроизведена.

Вот как должно выглядеть меню:

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
    }

}

IУ меня есть контроллер для меню, которое вызывает некоторые функции, которые отображают фактическое меню

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

override func awakeFromNib() {
    statusItem.menu = statusMenu

    updateTitle()
    setupMenu()
    renderMenu()
}

1 Ответ

0 голосов
/ 14 июня 2019

У меня была эта проблема с одним из моих приложений.Проблема заключалась в том, что мое приложение не выходило на передний план, когда меню активировалось.Я решил это путем реализации:

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