Window SwiftUI 应用程序中的新 Window 缺少控制按钮

Window Control Buttons Missing from New Window in SwiftUI App

从 Xcode 中的新 SwiftUI macOS 项目开始,我设置了一些非常基本的功能。

@main
struct SwiftUIWindowTestApp: App {
  var body: some Scene {
    WindowGroup {
      ContentView()
    }
  }
}

//ContentView
struct ContentView: View {
  var body: some View {
    //Button to open a new window
    Button("Open Preferences"){
      openPreferences()
    }
    .padding(100)
  }
  
  //Open the new window
  func openPreferences(){
    let preferencesWindow = NSWindow()
    preferencesWindow.contentView = NSHostingView(rootView: PreferencesView())
    let controller = NSWindowController(window: preferencesWindow)
    controller.showWindow(nil)
  }
}

//PreferencesView
struct PreferencesView: View {
  var body: some View {
    Text("Preferences")
      .frame(width:300, height:200)
  }
}

在应用启动时,我看到了我所期望的:

但是在我点击 打开首选项 之后,我看到一个新的 window 如下所示: 为什么该弹出窗口中缺少控制按钮(关闭、最小化、缩放)window?

我已经尝试将按钮明确设置为可见(即使默认情况下它们应该是可见的)但没有任何变化:

preferencesWindow.standardWindowButton(.closeButton)?.isHidden = false
preferencesWindow.standardWindowButton(.miniaturizeButton)?.isHidden = false
preferencesWindow.standardWindowButton(.zoomButton)?.isHidden = false

我在 AppKit 应用程序中使用了相同的示例,但它在 SwiftUI 中似乎有些奇怪。有什么想法吗?

看起来 NSWindow 会创建一个类似的 window,除非您在其上设置托管控制器。你的代码的这个修改版本对我有用:

func openPreferences(){
    let preferencesWindow = NSWindow(contentViewController: NSHostingController(rootView: PreferencesView()))
    let controller = NSWindowController(window: preferencesWindow)
    controller.showWindow(nil)
  }