我有一个窗口,我希望它能够在不允许访问停靠栏或菜单栏的情况下全屏显示。
我通过将窗口集合行为设置为 NSWindowCollectionBehaviorFullScreenPrimary
来启用全屏支持。我已尝试在 IB 中设置集合行为并通过直接调用 setCollectionBehavior:
进行设置,但这对问题没有影响。
我的窗口委托(delegate)也响应 window:willUseFullScreenPresentationOptions:
返回选项 NSApplicationPresentationFullScreen | NSApplicationPresentationHideDock | NSApplicationPresentationHideMenuBar
窗口的标题栏中有全屏按钮,可以很好地进入和退出全屏模式,所以我知道我已经正确设置了全屏支持。
根据我提供的演示选项,菜单栏的行为完全符合预期。
停靠栏是一个不同的故事,它总是表现得好像我通过了自动隐藏选项,并且无论我在 中提供什么选项,当我将鼠标移动到屏幕底部时它都会滑入 View 窗口:willUseFullScreenPresentationOptions:
这真的很奇怪,因为我得到一个带有自动隐藏停靠栏的隐藏菜单栏,如果你要在 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 选项。
将其添加到我的窗口委托(delegate)中,一切正常。
- (void)windowWillEnterFullScreen:(NSNotification*)notification
{
[[NSApplication sharedApplication] setPresentationOptions:NSApplicationPresentationHideMenuBar | NSApplicationPresentationHideDock];
}
- (void)windowDidExitFullScreen:(NSNotification*)notification
{
[[NSApplication sharedApplication] setPresentationOptions:NSApplicationPresentationDefault];
}
最佳答案
这是解决方案。
看来您不仅必须提供 windows 演示选项。但应用程序似乎有自己的演示选项,这些选项将覆盖 Windows 选项。
将其添加到我的窗口委托(delegate)中,一切正常。
- (void)windowWillEnterFullScreen:(NSNotification*)notification
{
[[NSApplication sharedApplication] setPresentationOptions:NSApplicationPresentationHideMenuBar | NSApplicationPresentationHideDock];
}
- (void)windowDidExitFullScreen:(NSNotification*)notification
{
[[NSApplication sharedApplication] setPresentationOptions:NSApplicationPresentationDefault];
}
关于objective-c - NSApplicationPresentationHideDock 没有效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26694142/