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

如何用Swift在macOS实现覆盖菜单栏的全屏覆盖层(无需全屏模式)

如何让自定义CoverView在非全屏模式下覆盖整个屏幕(含顶部菜单栏)

我需要让自定义的CoverView在不进入全屏模式的情况下覆盖整个屏幕,包括顶部的菜单栏区域。尝试过相关解决方案但并未生效,以下是我当前的实现代码:

CoverView 与 BlurEffectView 实现

struct CoverView: View {
    
    @EnvironmentObject private var appDelegate: AppDelegate
    
    @AppStorage(SettingsKeys.popUpMenuMessage) var popUpMenuMessage: String = "Time to give me twenty!"
    
    var body: some View {
        VStack {
            Text(popUpMenuMessage)
            
            Button(action: closeScreen) {
                Label("Close", systemImage: "arrow.up")
            }
        }
    }
    
    func closeScreen() {
        appDelegate.hideCoverWindow()
    }
}

struct BlurEffectView: NSViewRepresentable {
    func makeNSView(context: Context) -> NSVisualEffectView {
        // called when view is first created
        let view = NSVisualEffectView()

        view.blendingMode = .behindWindow
        view.state = .active
        view.material = .underWindowBackground

        return view
    }

    func updateNSView(_ nsView: NSVisualEffectView, context: Context) {}
}

App 入口实现

@main
struct GiveMeTwentyApp: App {
    // Accessing App Delegate
    @NSApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
    
    var body: some Scene {
        Window("CoverView", id: "CoverViewWindow", content: {
            GeometryReader { geometry in
                CoverView()
                    .frame(minWidth: geometry.size.width, minHeight: geometry.size.height)
                    .background(BlurEffectView().ignoresSafeArea())
                    .environmentObject(appDelegate)
            }
            
        }).windowStyle(.hiddenTitleBar) // hiding title bar itself
    }
}

AppDelegate 实现

class AppDelegate: NSObject, NSApplicationDelegate, ObservableObject {
    var coverWindow: NSWindow?
    
    func applicationDidFinishLaunching(_ notification: Notification) {
        configureCoverWindow()
    }
    
    
    func configureCoverWindow() {
        coverWindow = NSApplication.shared.windows.first(where: { $0.title == "CoverView" })
        coverWindow?.standardWindowButton(.closeButton)?.isHidden = true
        coverWindow?.standardWindowButton(.miniaturizeButton)?.isHidden = true
        coverWindow?.standardWindowButton(.zoomButton)?.isHidden = true
        coverWindow?.level = .popUpMenu
    }
}

当前CoverView的效果如下:
当前效果截图

内容的提问来源于stack exchange,提问作者N.K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 04:37:32