我使用以下代码在 macOS 上使用 SwiftUI 打开一个新窗口:
@main
struct ComponentsApp: App {
var body: some Scene {
WindowGroup {
TestView()
}
WindowGroup(id: "test") {
Text("Test")
}
}
}
struct TestView: View {
@Environment(\.openWindow) var openWindow
var body: some View {
Button("open") {
self.openWindow(id: "test")
}
}
}
在我启用的系统设置中,新窗口应始终作为选项卡打开。所以我的应用程序也这样做。我希望能够告诉 SwiftUI,不要点击窗口。这可能吗?
据我所知,实际上不可能使用 SwiftUI 设置
tabbingMode
。所以我用了这个:
struct WindowNoTab: NSViewRepresentable {
func makeNSView(context: Context) -> NSView {
let view = NSView()
Task { @MainActor in
view.window?.tabbingMode = .disallowed
}
return view
}
func updateNSView(_ nsView: NSView, context: Context) {}
}
extension View {
func noTabWindow() -> some View {
self
.background(WindowNoTab())
}
}
如果您随后在
WindowGroup
中修改视图,窗口将不再是选项卡式的:
struct ComponentsApp: App {
var body: some Scene {
WindowGroup {
TestView()
}
WindowGroup(id: "test") {
Text("Test")
.noTabWindow()
}
}
}