You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建无法通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 13:52:54