SwiftUI 2.0 не может удалить .titled из styleMask в NSWindow с помощью NSViewRepresentable

Я переделываю свое приложение для SwiftUI 2.0, но столкнулся с проблемой при репликации того, что я мог делать с AppDelegate.

Я использую NSViewRepresentable для доступа к NSWindow, поэтому я могу удалить заголовок окна (я знаю, что этого нет в рекомендациях, но это никогда не будет отправлено). При удалении .titled из styleMask, приложение вылетает.

      struct WindowAccessor: NSViewRepresentable {
    @Binding var window: NSWindow?
    
    func makeNSView(context: Context) -> NSView {
        let view = NSView()
        DispatchQueue.main.async {
            self.window = view.window
            self.window?.isOpaque = false
            self.window?.titlebarAppearsTransparent = true
            self.window?.backgroundColor = NSColor.clear
            self.window?.styleMask = [.fullSizeContentView]
            self.window?.isMovableByWindowBackground = true
            self.window?.backingType = .buffered
        }
        return view
    }
    
    func updateNSView(_ nsView: NSView, context: Context) {}
}

@main
struct MyApp_App: App {
    @State private var window: NSWindow?
    var body: some Scene {
        WindowGroup {
            ContentView().background(WindowAccessor(window: $window))
        }
    }
}

struct ContentView: View {
    var body: some View {
        Text("Hello, world!").padding().background(Color(NSColor.windowBackgroundColor))
    }
}

Когда я запускаю приложение, я получаю Thread 1: EXC_BAD_ACCESS (code=EXC_I386_GPFLT)

Все, что я пытаюсь достичь с помощью своего приложения, - это приложение строки меню, которое выглядит точно так же, как Spotlight. Нет значка док-станции, нет строки заголовка, все настройки обрабатываются всплывающим или другим окном.

0 ответов

Другие вопросы по тегам