import SwiftUI
@main
struct TestApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}.windowStyle(.hiddenTitleBar)
}
}
尝试
HiddenTitleBarWindowStyle()
此外,如果您有基于
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
}
}
我找不到在 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
}
使用此代码将使工具栏看起来隐藏,但实际上它仍然存在。但按钮是隐藏的,背景是透明的。
删除使用 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
}
点击这里了解更多信息