正如标题所建议的那样,我应该如何在macOS上禁用SwiftUI 2的全屏按钮?我能找到的唯一信息似乎使用了NSWindow的功能。在SwiftUI 2中有没有一种原生的方法来做到这一点?
NSWindow
wztqucjr1#
你可以简单地使用.onReceive修饰符来实现这个目的:
.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()) }
效果应该如下,第三个绿色按钮变成透明灰色:
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] } } } } } }
o2gm4chl3#
您可以使用.onAppear修饰符来禁用全屏按钮。
.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()) }
eivnm1vs4#
从macOS 13.0开始,您可以为ContentView定义size,并将windowResizability设置为contentSize。
size
windowResizability
contentSize
var body: some Scene { WindowGroup { ContentView().frame(width: 300, height: 400) }.windowResizability(.contentSize) }
4条答案
按热度按时间wztqucjr1#
你可以简单地使用
.onReceive
修饰符来实现这个目的:效果应该如下,第三个绿色按钮变成透明灰色:
fnx2tebb2#
YourAppName.Swift
o2gm4chl3#
您可以使用
.onAppear
修饰符来禁用全屏按钮。eivnm1vs4#
从macOS 13.0开始,您可以为ContentView定义
size
,并将windowResizability
设置为contentSize
。