我有一个状态栏应用程序,它在菜单栏中运行.因此,我设置Application is agent (UIElement)到true的info.plst.这导致我的应用程序没有停靠图标和菜单栏.
但是,我还有一个用户可以从状态栏菜单打开的首选项窗口.这是我打开它的方式:
if (!NSApp.setActivationPolicy(.regular)) {
print("unable to set regular activation policy")
}
NSApp.activate(ignoringOtherApps: true)
if let window = preferencesWindowController.window {
window.makeKeyAndOrderFront(nil)
}
Run Code Online (Sandbox Code Playgroud)
该窗口按预期显示,但应用程序的主菜单栏包含文件,编辑等,但未显示.只有当我点击另一个应用程序并返回我的应用程序时,才会显示菜单栏.
我注意到,如果我更改info.plstto中的值false并使用NSApp.setActivationPolicy(.accessory)in applicationDidFinishLaunching(),则它具有相同的结果.但是,如果我在调用NSApp.setActivationPolicy(.accessory)后几毫秒调用一个计时器applicationDidFinishLaunching(),它就可以工作,并且主菜单正在按预期显示.然而,这有副作用,即应用程序图标在停靠栏中弹出几秒钟(直到计时器被触发),这不是一个很好的用户体验.
有谁知道我还能尝试什么?切换活动应用时发生了什么,我在代码中没做什么?
我在macOS 10.12.2(16C67)上使用版本8.2.1(8C1002)
谢谢!