fix: title bar shows/hides based on window hover, not just top strip

- Remove 28pt overlay hover detection
- Add .onHover to entire window content (ZStack)
- Extract setWindowTitleBarVisible() helper function
- Mouse enters window → show title bar, mouse leaves → hide
This commit is contained in:
yumoqing 2026-06-30 23:54:36 +08:00
parent 5a031a57ea
commit ec8c3bd51c

View File

@ -241,6 +241,15 @@ struct PlayerContentView: View {
}
}
private func setWindowTitleBarVisible(_ visible: Bool) {
guard let win = NSApplication.shared.windows.first(where: { $0.isVisible }) else { return }
win.titlebarAppearsTransparent = !visible
win.titleVisibility = visible ? .visible : .hidden
win.standardWindowButton(.closeButton)?.isHidden = !visible
win.standardWindowButton(.miniaturizeButton)?.isHidden = !visible
win.standardWindowButton(.zoomButton)?.isHidden = !visible
}
var body: some View {
ZStack(alignment: .topLeading) {
Color.black.ignoresSafeArea()
@ -318,6 +327,9 @@ struct PlayerContentView: View {
}
}
}
.onHover { hovering in
setWindowTitleBarVisible(hovering)
}
.onAppear {
// 绿
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
@ -337,28 +349,6 @@ struct PlayerContentView: View {
hideTimer?.invalidate()
}
}
.overlay(alignment: .top) {
// 退
Color.clear
.frame(height: 28)
.contentShape(Rectangle())
.onHover { hovering in
guard let win = NSApplication.shared.windows.first(where: { $0.isVisible }) else { return }
if hovering {
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.standardWindowButton(.closeButton)?.isHidden = true
win.standardWindowButton(.miniaturizeButton)?.isHidden = true
win.standardWindowButton(.zoomButton)?.isHidden = true
}
}
}
.onDisappear {
hideTimer?.invalidate()
}