NSApplicationPresentationHideDock无效

时间:2014-11-01 22:59:32

标签: objective-c macos cocoa nswindow

我有一个窗口,我希望能够在不允许访问扩展坞或菜单栏的情况下全屏显示。

我通过将窗口集合行为设置为NSWindowCollectionBehaviorFullScreenPrimary来启用全屏支持。我已尝试在IB中设置收集行为并直接调用setCollectionBehavior:,但它对此问题没有影响。

我的窗口委托也会回复window:willUseFullScreenPresentationOptions:返回选项NSApplicationPresentationFullScreen | NSApplicationPresentationHideDock | NSApplicationPresentationHideMenuBar

窗口的标题栏中有全屏按钮,可以进出全屏模式,所以我知道我已经正确设置了全屏支持。

菜单栏的行为完全符合我提供的演示选项。

Dock如何是一个不同的故事,它总是表现得好像我通过了自动隐藏选项,当我将鼠标移动到屏幕底部时,无论我在{{1 }}

我真的很奇怪,因为我得到一个带有自动隐藏停靠栏的隐藏菜单栏,如果你要在window:willUseFullScreenPresentationOptions:中返回这个等效的标志组合(NSApplicationPresentationAutoHideDock | NSApplicationPresentationHideMenuBar),你会得到一个例外,说明组合无效。

我错过了什么吗?

更新1:

在OS X 10.8上试过这个,它就像文档指出的那样工作。在OS X 10.9和OS X 10.10上,它每次都会失败。还尝试了Apple的示例代码项目“FullScreenWindow”,它像我一样指定标志,它也无法在10.9和10.10上隐藏停靠,在10.8上完美运行。

我认为这可能是一个Apple漏洞,或者是该功能的问题,或者,如果他们弃用了该功能,那么它就是文档错误,因为它没有在任何地方显示。

我已经用Apple登录了它。

更新2:

找到了解决方案!

似乎你不仅要提供windows演示选项。但似乎应用程序有自己的演示选项,将覆盖Windows选项。

将此添加到我的窗口委托中,一切正常。

window:willUseFullScreenPresentationOptions:

1 个答案:

答案 0 :(得分:2)

这是解决方案。

似乎你不仅要提供windows演示选项。但似乎应用程序有自己的演示选项,将覆盖Windows选项。

将此添加到我的窗口委托中,一切正常。

- (void)windowWillEnterFullScreen:(NSNotification*)notification
{
     [[NSApplication sharedApplication] setPresentationOptions:NSApplicationPresentationHideMenuBar | NSApplicationPresentationHideDock];
}

- (void)windowDidExitFullScreen:(NSNotification*)notification
{
     [[NSApplication sharedApplication] setPresentationOptions:NSApplicationPresentationDefault];

}