objective-c - NSApplicationPresentationHideDock 没有效果

标签 objective-c macos cocoa nswindow

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

我通过将窗口集合行为设置为 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/

相关文章:

objective-c - 为什么 fget 不工作?

cocoa - 如何更改 NSWindow 标题栏的高度?

ios - UIView 动画立即发生

swift :NSBezier

Objective-C 运行时

macos - Swift NSUserNotificationCenter didActivateNotification 不工作

ios - 如何将 NSString 传递给调用 printf 的函数?

cocoa - 通过 NSPipe 或 NSFileHandle 发送 EOF 到 NSTask

ios - 如何制作全局词典

objective-c - 如何在 OSX 应用程序中拉伸(stretch)图像?