From 5a031a57eaad6d58b6fe6f05e719bae4b08a1740 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Tue, 30 Jun 2026 23:49:32 +0800 Subject: [PATCH] fix: fully hide title bar including traffic lights - Hide close/minimize/zoom buttons on startup - Show all buttons + title on hover, hide on exit - Use asyncAfter to ensure window is ready - Find visible window instead of first window - Enable window drag by background when title bar hidden --- Sources/MiniPlayerApp.swift | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/Sources/MiniPlayerApp.swift b/Sources/MiniPlayerApp.swift index cdf62e6..587fc85 100644 --- a/Sources/MiniPlayerApp.swift +++ b/Sources/MiniPlayerApp.swift @@ -319,10 +319,15 @@ struct PlayerContentView: View { } } .onAppear { - // 初始状态:标题栏完全隐藏 - if let win = NSApplication.shared.windows.first { + // 初始状态:标题栏完全隐藏(含红绿灯按钮) + DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { + guard let win = NSApplication.shared.windows.first(where: { $0.isVisible }) else { return } win.titleVisibility = .hidden win.titlebarAppearsTransparent = true + win.isMovableByWindowBackground = true + win.standardWindowButton(.closeButton)?.isHidden = true + win.standardWindowButton(.miniaturizeButton)?.isHidden = true + win.standardWindowButton(.zoomButton)?.isHidden = true } } .onChange(of: showToolbar) { _, newValue in @@ -333,18 +338,24 @@ struct PlayerContentView: View { } } .overlay(alignment: .top) { - // 标题栏悬停检测:鼠标进入显示标题,退出隐藏 + // 标题栏悬停检测:鼠标进入显示标题栏,退出隐藏 Color.clear .frame(height: 28) .contentShape(Rectangle()) .onHover { hovering in - let win = NSApplication.shared.windows.first + guard let win = NSApplication.shared.windows.first(where: { $0.isVisible }) else { return } if hovering { - win?.titleVisibility = .visible - win?.titlebarAppearsTransparent = false + win.titlebarAppearsTransparent = false + win.titleVisibility = .visible + win.standardWindowButton(.closeButton)?.isHidden = false + win.standardWindowButton(.miniaturizeButton)?.isHidden = false + win.standardWindowButton(.zoomButton)?.isHidden = false } else { - win?.titleVisibility = .hidden - win?.titlebarAppearsTransparent = true + win.titleVisibility = .hidden + win.titlebarAppearsTransparent = true + win.standardWindowButton(.closeButton)?.isHidden = true + win.standardWindowButton(.miniaturizeButton)?.isHidden = true + win.standardWindowButton(.zoomButton)?.isHidden = true } } }