【发布时间】:2018-05-20 12:42:03
【问题描述】:
我的菜单栏应用出现间歇性渲染问题。每当我从菜单打开应用程序时,它都可以正常工作,但有时当应用程序运行时,我从停靠栏/启动板单击应用程序图标时,我会得到带有文本的菜单这种奇怪的布局。当我点击应用程序显示的NSUserNotification 时,也会发生这种情况。我用谷歌搜索了很多,但我找不到任何关于此类问题的参考。
重现步骤:
- 打开应用
- 再次单击启动板中的应用图标
这种情况只发生一次,此后问题无法重现。
这是菜单的外观:
不正确的菜单:
这是我的 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/…