【问题标题】:Hide NSToolbar in fullscreen全屏隐藏 NSToolbar
【发布时间】:2018-11-06 14:29:57
【问题描述】:

我正在制作一个 Cocoa 应用程序,具有隐藏的统一 NSToolbar 和 Titlebar。为此,我在窗口控制器中添加了一个工具栏,并设置了所有选项以使其不可见并保留 3 个彩色按钮。它在普通窗口中效果很好,但是如果我将此窗口置于全屏状态,它会在顶部显示一个空的工具栏。

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

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

奖励:我已启用isMovableByWindowBackgroundable,但是否有一个选项可以在双击窗口背景时切换“最大化”操作,就像它通常适用于标题栏一样?

图片如下:

How it looks with a transparent toolbar

How it looks in fullscreen, the toolbar is opaque

【问题讨论】:

    标签: cocoa fullscreen nswindow swift4.2 nstoolbar


    【解决方案1】:

    你可以通过设置NSWindow的delegate和实现实现和Mac App Store一样的效果:

    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; }
    • 干杯伙伴!成就了我的一周!
    【解决方案2】:

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

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

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

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

    编辑:

    要获取视图并更改颜色,您可以使用windowDidLoad 中的以下代码。当然,要获得 100% 的 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)
    

    希望这会有所帮助。

    【讨论】:

    • 你的代码确实可以隐藏标题栏,但是关闭/最小化/最大化按钮在左上角。我希望它们就像有统一工具栏时一样。我可以通过添加一个空的工具栏来实现这一点,并且使用您提供的相同代码,它就像我想要的那样不可见,但是如果我全屏显示,工具栏会重新出现,而没有工具栏,标题栏会消失,但 3 个按钮不在我的位置希望他们成为。
    • 对于 Mac App Store,如果有工具栏,按钮就在假设的位置,如果您进入全屏模式并将鼠标放在顶部,那么面板就是向下滑动显示关闭/最小化/最大化按钮是统一工具栏的大小(它是半透明的)。这让我觉得他们使用的是透明工具栏。
    • 你是对的,它看起来有些不同。我扩展了我的答案,以展示如何访问和修改视图颜色的方法。我找到了获得正确视图的方法。
    • 有了这个我可以改变栏的颜色,但它在全屏时没有效果。我想要的是让工具栏全屏消失。我不确定是否可以通过更改颜色来实现:/
    • 你最初的问题怎么样 -> 如何使这个工具栏在全屏时也透明(不可见)?如果您按照我向您提出的建议,您将获得与 App Store 应用程序完全一样的外观和感觉。但是,如果您想在没有工具栏的情况下制作带有工具栏的窗口,我只能祝您好运。
    猜你喜欢
    • 2012-02-26
    • 2016-01-18
    • 1970-01-01
    • 1970-01-01
    • 2012-03-05
    • 2011-01-23
    • 2015-03-17
    • 2022-01-04
    • 2019-03-21
    相关资源
    最近更新 更多