全屏隐藏 NSToolbar

Hide NSToolbar in fullscreen

我正在制作一个 Cocoa 应用程序,带有隐藏的统一 NSToolbar 和标题栏。我通过在 Window 控制器中添加一个工具栏并设置所有选项使其不可见并保留 3 个彩色按钮来完成此操作。它在普通 window 中运行良好,但如果我将此 window 置于全屏模式,它会在顶部显示一个空的工具栏。

如何使这个工具栏在全屏时也透明?

这是可能的,因为它在 macOS Mojave 的新 Mac AppStore 中是如何工作的(有一个隐藏的工具栏,它在全屏模式下仍然隐藏,只有当鼠标放在顶部时才会出现屏幕)。

奖励:我已经启用了 isMovableByWindowBackgroundable,但是是否有一个选项可以在双击 window 背景时切换 "maximize" 操作,就像它通常用于标题栏一样?

图片如下:

How it looks with a transparent toolbar

How it looks in fullscreen, the toolbar is opaque

我假设您正在寻找的是这样的 window 配置。

window!.titleVisibility = .hidden
window!.titlebarAppearsTransparent = true
window!.styleMask = [window!.styleMask,  NSWindow.StyleMask.fullSizeContentView]

您可以将此代码添加到您的 NSWindowControllers windodDidLoad()

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

编辑:

要获取视图并更改颜色,您可以使用下面 windowDidLoad 中的代码。当然,要像 Mac App Store window 那样 100% 需要进行一些微调,使用固定颜色并不是一个好主意。

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

希望这对您有所帮助。

你可以通过设置 NSWindow 的委托并实现与 Mac App Store 相同的效果:

func window(_ window: NSWindow, willUseFullScreenPresentationOptions proposedOptions: NSApplication.PresentationOptions = []) -> NSApplication.PresentationOptions {
    return [.autoHideToolbar, .autoHideMenuBar, .fullScreen]
}

这将在全屏模式下隐藏工具栏和菜单栏,仅当鼠标位于屏幕顶部时才会出现。可能需要对视图进行更新以更新内容,但这是可选的。