如何在macOS上使用SwiftUI 2禁用全屏按钮

bfhwhh0e  于 2023-06-04  发布在  Swift
关注(0)|答案(4)|浏览(355)

正如标题所建议的那样,我应该如何在macOS上禁用SwiftUI 2的全屏按钮?
我能找到的唯一信息似乎使用了NSWindow的功能。在SwiftUI 2中有没有一种原生的方法来做到这一点?

wztqucjr

wztqucjr1#

你可以简单地使用.onReceive修饰符来实现这个目的:

struct MacApp: App {
var body: some Scene {
    WindowGroup {
        ContentView()
            .frame(width: 480, height: 272)
            .fixedSize()
            .onReceive(NotificationCenter.default.publisher(for: NSApplication.willUpdateNotification), perform: { _ in
                for window in NSApplication.shared.windows {
                    window.standardWindowButton(.zoomButton)?.isEnabled = false
                }
            })
    }
    .windowStyle(HiddenTitleBarWindowStyle())
}

效果应该如下,第三个绿色按钮变成透明灰色:

fnx2tebb

fnx2tebb2#

YourAppName.Swift

import SwiftUI

@main
struct YourApp: App {    
    var body: some Scene {
        WindowGroup {
            ContentView()
                .onAppear {
                    DispatchQueue.main.async {
                        NSApplication.shared.windows.forEach { window in
                            window.styleMask = [.titled, .closable, .miniaturizable]
                        }
                    }
                }
        }
    }
}
o2gm4chl

o2gm4chl3#

您可以使用.onAppear修饰符来禁用全屏按钮。

struct MacApp: App {
var body: some Scene {
   WindowGroup {
       ContentView()
           .onAppear {
               DispatchQueue.main.async {
                   NSApplication.shared.windows.forEach { window in
                       window.standardWindowButton(.zoomButton)?.isEnabled = false
                   }
               }
           }
   }
   .windowStyle(HiddenTitleBarWindowStyle())
}
eivnm1vs

eivnm1vs4#

macOS 13.0开始,您可以为ContentView定义size,并将windowResizability设置为contentSize

var body: some Scene {
    WindowGroup {
        ContentView().frame(width: 300, height: 400)
    }.windowResizability(.contentSize)
}

相关问题