在全屏模式下隐藏NSToolbar

8
我正在制作一个Cocoa应用程序,其中包含隐藏的统一NSToolbar和Titlebar。我通过在窗口控制器中添加工具栏并设置所有选项来使其不可见并保留3个彩色按钮来实现这一点。在普通窗口中它运行得非常好,但如果我将此窗口置于全屏模式下,则会显示一个空的工具栏在顶部。
如何使这个工具栏在全屏模式下也透明呢?
这可能是可能的,因为这就是在macOS Mojave中新的Mac AppStore中的工作方式(有一个隐藏的工具栏,在全屏模式下仍然隐藏,并且只有当鼠标放在屏幕顶部时才会出现)。
奖励:我启用了isMovableByWindowBackgroundable,但是否有选项可以切换双击窗口背景时的“最大化”操作,就像标题栏正常工作一样?
这里是图片: 有透明工具栏的外观 全屏模式下的外观,工具栏是不透明的
2个回答

13

通过设置NSWindow的delegate并实现以下方法,您可以实现与Mac应用商店相同的效果:

func window(_ window: NSWindow, willUseFullScreenPresentationOptions proposedOptions: NSApplication.PresentationOptions = []) -> NSApplication.PresentationOptions {
    return [.autoHideToolbar, .autoHideMenuBar, .fullScreen]
}
这将在全屏时隐藏工具栏和菜单栏,只有当鼠标移到屏幕顶部时才会出现。更新视图可能需要实现以更新内容,但这是可选的。

非常好用。这是ObjC的代码:- (NSApplicationPresentationOptions) window:(NSWindow *)window willUseFullScreenPresentationOptions:(NSApplicationPresentationOptions)proposedOptions { return NSApplicationPresentationAutoHideToolbar | NSApplicationPresentationAutoHideMenuBar | NSApplicationPresentationFullScreen; } - Holtwick
干得好伙计!让我的一周都变得更美好了! - mmsarquis

1
我猜你想要的是这样的窗口配置。
window!.titleVisibility = .hidden
window!.titlebarAppearsTransparent = true
window!.styleMask = [window!.styleMask,  NSWindow.StyleMask.fullSizeContentView]

您需要在NSWindowControllers的windodDidLoad()中添加此代码。

在Mac App Store应用程序中,我没有看到任何工具栏。如果您不想显示工具栏,则无需将NSToolbar添加到窗口中。

编辑:

要获取视图并更改颜色,您可以在windowDidLoad中使用以下代码。当然,还需要进行一些微调才能使其完全像Mac App Store窗口,并且使用固定颜色并不是一个好主意。

let button = window?.standardWindowButton(NSWindow.ButtonType.closeButton)
let containerView = button?.superview?.superview // NSTitlebarContainerView
containerView?.layer?.backgroundColor = CGColor.init(gray: 0.9, alpha: 1.0)

希望这有所帮助。

1
您的代码确实可以隐藏标题栏,但关闭/最小化/最大化按钮位于左上角。我希望它们就像在统一的工具栏中一样。我可以通过添加一个空工具栏来实现这一点,并使用您提供的相同代码,使其像我想要的那样不可见,但如果我全屏,工具栏会重新出现,而没有工具栏,则标题栏消失,但3个按钮不在我想要它们在的位置。 - Herlid
对于 Mac App Store,按钮的位置与工具栏上应该有的位置一致。如果您进入全屏模式并将鼠标放在顶部,下滑显示关闭/最小化/最大化按钮的面板大小与统一工具栏相同(半透明)。这让我想到他们正在使用一个透明的工具栏。 - Herlid
你说得对,它看起来有些不同。我扩展了我的答案,以展示您可以访问和修改视图的颜色的方法。我找到了一种获取正确视图的方法。 - Marc T.
通过这个,我可以改变工具栏的颜色,但是在全屏模式下没有效果。我想让工具栏在全屏模式下消失。我不确定是否可以通过改变颜色来实现:/ - Herlid
关于您最初的问题 -> 如何使全屏模式下的工具栏也透明(不可见)?如果您按照我向您建议的做法,您将得到与App Store应用程序完全相同的外观和体验。但是,如果您想要创建一个带有工具栏但又没有工具栏的窗口,那么我只能祝您好运了。 - Marc T.
工具栏在普通窗口中是透明的,但在全屏模式下变为不透明。您的代码可以更改背景颜色,但如果我将 alpha 设置为 0,则在全屏模式下仍然不透明。我已经在我的帖子中更新了图片。 - Herlid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接