如何在 SwiftUI 中隐藏标题栏? (适用于 MacOS 应用程序)

问题描述 投票:0回答:4

我知道如何用故事板隐藏标题栏。

enter image description here

但我无法在 SwiftUI 中执行此操作。

我想隐藏标题栏和控制按钮并制作浮动图像视图。

swift xcode macos swiftui
4个回答
16
投票
import SwiftUI
@main
struct TestApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }.windowStyle(.hiddenTitleBar)
    }
}

尝试

HiddenTitleBarWindowStyle()


7
投票

此外,如果您有基于

SwiftUI
的应用程序
@main
,您可以使用
.windowStyle()
修饰符来隐藏标题栏,使用 AppDelegate 来隐藏按钮,如下所示:

import SwiftUI

@main
struct MyApp: App {
    @NSApplicationDelegateAdaptor(AppDelegate.self) var appDelegate

    var body: some Scene {
        WindowGroup {
            ContentView()
        }
        .windowStyle(HiddenTitleBarWindowStyle())
    }
}

class AppDelegate: NSObject, NSApplicationDelegate {
    func applicationDidFinishLaunching(_ notification: Notification) {
        hideTitleBar()
    }

    func hideTitleBar() {
        guard let window = NSApplication.shared.windows.first else { assertionFailure(); return }
        window.standardWindowButton(.closeButton)?.isHidden = true
        window.standardWindowButton(.miniaturizeButton)?.isHidden = true
        window.standardWindowButton(.zoomButton)?.isHidden = true
    }
}

对于

Catalyst
,可以使用
.onAppear { }
修饰符和
UITitleBar
api 隐藏标题栏:

import SwiftUI

@main
struct MyApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
                .onAppear { hideTitleBarOnCatalyst() }
        }
    }

    func hideTitleBarOnCatalyst() {
#if targetEnvironment(macCatalyst)
        (UIApplication.shared.connectedScenes.first as? UIWindowScene)?.titlebar?.titleVisibility = .hidden
#endif
    }
}

3
投票

我找不到在 SwiftUI 中完全隐藏工具栏的方法。但这是一个可能的解决方法。您可以将此代码放入您的 AppDelegate 文件中。

func applicationDidFinishLaunching(_ aNotification: Notification) {
    let window = NSApplication.shared.windows.first!
    window.titlebarAppearsTransparent = true
    window.backgroundColor = .white
    window.standardWindowButton(.closeButton)!.isHidden = true
    window.standardWindowButton(.miniaturizeButton)!.isHidden = true
    window.standardWindowButton(.zoomButton)!.isHidden = true
}

使用此代码将使工具栏看起来隐藏,但实际上它仍然存在。但按钮是隐藏的,背景是透明的。


1
投票

删除使用 Mac Catalyst 构建的 Mac 应用程序中的标题栏

通过删除标题栏来显示填充窗口整个高度的内容。

默认情况下,使用 Mac Catalyst 构建的 Mac 应用程序会在窗口顶部显示标题栏。一条水平线将标题栏与窗口内容分开。 某些 Mac 应用程序(例如“消息”和“联系人”)的主窗口中没有标题栏。相反,窗口顶部仅显示“关闭”、“最小化”和“缩放”按钮,它们与窗口内容之间没有分隔符。在此 UI 设计中,内容区域填充了窗口的整个高度。 下图在两个窗口中说明了这些样式。第一个窗口显示标题栏,而第二个窗口则没有。 两个窗口的屏幕截图,一个堆叠在另一个窗口之上,每个窗口的内容区域都有深色背景。

删除标题栏 如果您选择设计没有标题栏的窗口,则必须将其从窗口中删除。要删除标题栏,请将标题栏的 titleVisibility 属性设置为 UITitlebarTitleVisibility.hidden 并将工具栏属性设置为 nil。以下代码显示了如何在设置新场景期间从窗口中删除标题栏及其分隔符。

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    
    guard let windowScene = (scene as? UIWindowScene) else { return }
    
    #if targetEnvironment(macCatalyst)
    if let titlebar = windowScene.titlebar {
        titlebar.titleVisibility = .hidden
        titlebar.toolbar = nil
    }
    #endif

}

点击这里了解更多信息

© www.soinside.com 2019 - 2024. All rights reserved.