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

Ran*_*tep 5 user-interface swift swiftui

正如标题所建议的,我应该如何在 macOS 上禁用 SwiftUI 2 的全屏按钮?

我能找到的唯一信息似乎使用了NSWindow. SwiftUI 2 中有没有一种原生方法可以做到这一点?

ste*_*hen 8

你可以简单地使用.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())
}
Run Code Online (Sandbox Code Playgroud)

效果应该如下,第三个绿色按钮变成透明灰色: 在此输入图像描述


小智 1

从macOS 13.0开始,您可以定义sizeContentView 并将其设置windowResizabilitycontentSize.

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