我正在制作一个Cocoa应用程序,其中包含一个隐藏的统一NSToolbar和Titlebar。我在窗口控制器中添加了一个工具栏,并设置了所有选项,使其不可见,并保留了3个颜色的按钮。它在普通窗口中工作得很好,但如果我把这个窗口放在全屏中,它会在顶部显示一个空的工具栏。
如何使这个工具栏在全屏中也是透明的?
这是可能的,因为它在macOS Mojave的新Mac AppStore中是如何工作的(有一个隐藏的工具栏仍然隐藏在全屏中,只有当鼠标放在屏幕顶部时才会出现(。
额外的好处:我已经启用了isMovableByWindowBackgroundable
,但有没有一个选项可以在双击窗口背景的同时切换"最大化"操作,就像它通常用于标题栏一样?
图片如下:
透明工具栏的外观
它在全屏中的外观,工具栏是不透明的
您可以通过设置NSWindow的委托并实现:来实现与Mac App Store相同的效果
func window(_ window: NSWindow, willUseFullScreenPresentationOptions proposedOptions: NSApplication.PresentationOptions = []) -> NSApplication.PresentationOptions {
return [.autoHideToolbar, .autoHideMenuBar, .fullScreen]
}
这将在全屏显示时隐藏工具栏和菜单栏,只有当鼠标位于屏幕顶部时才会显示。可能需要实现对视图的更新来更新内容,但这是可选的。
我想您正在寻找的是这样的窗口条件。
window!.titleVisibility = .hidden
window!.titlebarAppearsTransparent = true
window!.styleMask = [window!.styleMask, NSWindow.StyleMask.fullSizeContentView]
您可以将此代码添加到NSWindowControllerswindodDidLoad()
中
在Mac应用商店应用程序中,我看不到任何工具栏。如果不想显示工具栏,则不需要向窗口中添加NSToolbar。
编辑:
要获得视图并更改颜色,可以在windowDidLoad
中使用以下代码。当然,要想让它100%像Mac应用商店的窗口一样,还需要进行一些微调,使用固定的颜色不是一个好主意。
let button = window?.standardWindowButton(NSWindow.ButtonType.closeButton)
let containerView = button?.superview?.superview // NSTitlebarContainerView
containerView?.layer?.backgroundColor = CGColor.init(gray: 0.9, alpha: 1.0)
希望这能有所帮助。