Mac Catalyst 中的透明工具栏

Posted

技术标签:

【中文标题】Mac Catalyst 中的透明工具栏【英文标题】:Transparent Toolbar in Mac Catalyst 【发布时间】:2020-03-05 14:09:57 【问题描述】:

我能够使用SceneDelegate.swift 中的这个在 Mac Catalyst 中创建一个统一的工具栏:

// Use a UIHostingController as window root view controller.
if let windowScene = scene as? UIWindowScene 
    let window = UIWindow(windowScene: windowScene)
    window.rootViewController = UIHostingController(rootView: contentView)
    // hide the titlebar
    windowScene.titlebar?.toolbar = NSToolbar()
    windowScene.titlebar?.titleVisibility = .hidden
    ...

但我想让工具栏像这个例子一样透明: https://lukakerr.github.io/swift/nswindow-styles#11-transparent-toolbar-without-seperator

这在 Mac Catalyst 中是否可行?

【问题讨论】:

这应该是可能的,并且现有的解决方案也将通过 App Store 审核流程,因为 Mac App Store 中已经有应用程序。例如。胡萝卜 天气。我很想看到一个简单的解决方案。不明白为什么它不可能开箱即用。它对于外观现代的应用程序非常重要。 检查该链接:developer.apple.com/documentation/uikit/mac_catalyst/… 【参考方案1】:

是的,这在 Mac Catalyst 中是可能的。在您的 SceneDelegate.swift 文件中,将工具栏和标题的可见性分别设置为 false.hidden

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) 
    guard let windowScene = (scene as? UIWindowScene) else  return 

    #if targetEnvironment(macCatalyst)
    windowScene.titlebar?.toolbar?.isVisible = false
    windowScene.titlebar?.titleVisibility = .hidden
    #endif

【讨论】:

这个线程向我展示了如何隐藏 mac 催化剂应用程序的标题栏,我会问一个问题并得到一个 500 投反对票的炸弹,所以欢呼:) @Benj,我很高兴你发现这个帖子很有帮助!不要犹豫,提出与新软件相关的问题,如果没有适当的文档和 *** 社区,它们总是很麻烦。【参考方案2】:

覆盖 func viewDidAppear(_ animated: Bool) super.viewDidAppear(动画)

    #if targetEnvironment(macCatalyst)
    
    if let titlebar = self.view.window?.windowScene?.titlebar 
            titlebar.titleVisibility = .hidden
            titlebar.toolbar = nil
        
    #endif
    
    

【讨论】:

【参考方案3】:

这是一个类似的解决方案:

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) 

guard let windowScene = (scene as? UIWindowScene) else  return 

#if targetEnvironment(macCatalyst) //check target
if let titlebar = windowScene.titlebar 
    titlebar.titleVisibility = .hidden
    titlebar.toolbar = nil

#endif


【讨论】:

以上是关于Mac Catalyst 中的透明工具栏的主要内容,如果未能解决你的问题,请参考以下文章

在 Mac Catalyst 项目中未调用 IBAction

SwiftUI - Catalyst 半透明侧边栏

通过 Catalyst 工具 Xcode 11 从 Bundle for MacOS App 加载 WKWebView 中的 PDF

检测 UIKit for Mac (Catalyst) 中的单个修饰符键更改

如何更改 Mac Catalyst 窗口场景中的窗口标题?

Mac-catalyst - Mac 催化剂应用程序的最小窗口大小