如何创建无法通过Command + W关闭的无关闭按钮不可调整大小主窗口?
实现无法通过Command + W关闭的工具栏样式窗口
可以实现这样的窗口,核心是拦截窗口的关闭请求,同时保留你已设置的无按钮、不可调整大小等特性。以下是修改后的完整代码:
import SwiftUI @main struct ProductiveBoxApp: App { var body: some Scene { WindowGroup { Toolbar() .background(TitleBarHiddenWindow()) } .windowStyle(HiddenTitleBarWindowStyle()) .windowResizability(.contentSize) } } struct TitleBarHiddenWindow: NSViewRepresentable { func makeNSView(context: Context) -> NSView { let view = NSView() DispatchQueue.main.async { guard let window = view.window else { return } // 隐藏标题栏按钮 window.titleVisibility = .hidden window.titlebarAppearsTransparent = true window.standardWindowButton(.closeButton)?.isHidden = true window.standardWindowButton(.zoomButton)?.isHidden = true window.standardWindowButton(.miniaturizeButton)?.isHidden = true // 设置窗口层级为浮动 window.level = .floating // 设置窗口代理,拦截关闭请求 window.delegate = context.coordinator } return view } func updateNSView(_ nsView: NSView, context: Context) {} // 创建Coordinator作为NSWindowDelegate func makeCoordinator() -> Coordinator { Coordinator() } class Coordinator: NSObject, NSWindowDelegate { // 拦截窗口关闭请求,返回false阻止关闭 func windowShouldClose(_ sender: NSWindow) -> Bool { return false } } }
关键修改点:
- 添加
Coordinator类并实现NSWindowDelegate协议的windowShouldClose方法,返回false拦截所有关闭请求(包括Command+W快捷键、Dock图标右键关闭等)。 - 将窗口的
delegate绑定到该Coordinator,确保关闭逻辑生效。
设置完成后,窗口既无关闭按钮、不可调整大小,也无法通过常规方式关闭,完全符合需求。
内容的提问来源于stack exchange,提问作者user23116367
相关产品推荐
相关产品推荐

