如何用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.
相关产品推荐
相关产品推荐

