NSApplicationPresentationHideDock无效

Bra*_*d S 6 macos cocoa objective-c nswindow

我有一个窗口,我希望能够全屏,而不允许访问Dock或菜单栏.

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

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

该窗口在标题栏中提供了全屏按钮,可以移入和移出全屏模式,所以我知道我已经正确设置了全屏支持.

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

这个码头是一个不同的故事,它总是表现得好像我通过了自动隐藏选项,当我将鼠标移动到屏幕底部时无论我提供什么选项都会滑入视图 window:willUseFullScreenPresentationOptions:

这真的很奇怪,因为我得到一个带有自动隐藏扩展坞的隐藏菜单栏,如果你要返回这个等效的flags(NSApplicationPresentationAutoHideDock | NSApplicationPresentationHideMenuBar)组合,window:willUseFullScreenPresentationOptions:你会得到一个异常,说该组合无效.

我错过了什么吗?

更新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选项.

添加到我的窗口委托,一切正常.

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

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

}
Run Code Online (Sandbox Code Playgroud)

Bra*_*d S 2

这是解决方案。

看来您不仅必须提供 Windows 演示选项。但应用程序似乎有自己的演示选项,将覆盖窗口选项。

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

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

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

}
Run Code Online (Sandbox Code Playgroud)