SwiftUI - 防止以选项卡形式打开新窗口

问题描述 投票:0回答:1

我使用以下代码在 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 nswindow
1个回答
0
投票

据我所知,实际上不可能使用 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()
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.