Objective c NSApplicationPresentationHiddeDock无效

Objective c NSApplicationPresentationHiddeDock无效,objective-c,macos,cocoa,nswindow,Objective C,Macos,Cocoa,Nswindow,我有一个窗口,我希望能够采取全屏不允许进入码头或菜单栏 我通过将窗口收集行为设置为NSWindowCollectionBehaviorFullScreenPrimary来启用全屏支持。我已尝试在IB和直接调用setCollectionBehavior:来设置收集行为,但对问题没有任何影响 我的窗口代理还响应window:willUseFullScreenPresentationOptions:返回选项NSApplicationPresentationFullScreen | nsApplicat

我有一个窗口,我希望能够采取全屏不允许进入码头或菜单栏

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

我的窗口代理还响应
window:willUseFullScreenPresentationOptions:
返回选项
NSApplicationPresentationFullScreen | nsApplicationPresentationHiddeDock | NSApplicationPresentationHideMenuBar

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

菜单栏的行为与我提供的演示选项完全相同

dock无论如何都是一个不同的故事,它总是表现得好像我通过了自动隐藏选项,当我将鼠标移动到屏幕底部时,无论我在
窗口中提供了什么选项:willUseFullScreenPresentationOptions:

这真的很奇怪,因为我得到了一个带有自动隐藏停靠的隐藏菜单栏,如果你在
窗口中返回这个等价的标志组合(
NSApplicationPresentationAutoHideDock | NSApplicationPresentationHideMenuBar
),willusefullscreeenspresentationoptions:
你会得到一个异常,说组合无效

我错过什么了吗

更新1:

在OSX10.8上尝试过这个,它的工作原理与文档中指出的一样。在OSX10.9和OSX10.10上,每次都会失败。还尝试了苹果的示例代码项目“FullScreenWindow”,它和我一样指定了标志,并且在10.9和10.10上也无法隐藏dock,在10.8上效果很好

我认为这可能是苹果的一个bug,或者是该功能有问题,或者是,如果他们不赞成该功能,那么这就是一个文档bug,因为在任何地方都没有指出

我已经用苹果公司把它记录下来了

更新2:

找到了解决办法

似乎您不仅必须提供windows演示文稿选项。但应用程序似乎有自己的表示选项,可以覆盖windows选项

将此添加到我的窗口代理,一切正常

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

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

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

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

}
这是解决办法

似乎您不仅必须提供windows演示文稿选项。但应用程序似乎有自己的表示选项,可以覆盖windows选项

将此添加到我的窗口代理,一切正常

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

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

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

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

}

也许菜单栏或dock最有用?文档说,同时隐藏、同时隐藏dock和菜单栏以及同时自动隐藏都是有效的选项,我见过许多其他应用程序有这种行为。我肯定我只是错过了一些东西,但我不知道那可能是什么。在10.10.3上,它会一直工作,直到你在cmd标签上来回切换到全屏应用程序。之后,Dock和菜单栏再次开始自动显示。该死!苹果公司的漏洞报告仍然有效吗?我想不会有OpenRadar的罚单吧?我用的是10.10,标题栏上没有全屏按钮。你怎么知道的?我可以让窗口在启动时缩放到全屏,并从我添加的主菜单视图菜单项切换缩放。您的附加代码阻止访问主菜单。顺便说一句,iPhoto和Safari都没有缩放按钮,zoom也可以从主菜单View menuItem访问。当用户玩focus(例如,他召唤任务控制)时,问题会出现,然后应用程序返回其默认的演示选项,这是错误的,并且将应用程序的演示选项设置在will enter full screen(将进入全屏)之外似乎具有autohide(自动隐藏)的原始效果dock:(Ok)发现挂接到ApplicationIDChangeOccessionState会为显示功能提供所有反馈事件。