Проблема с изменением WindowGroup в SwiftUI lifecycle macOS при удалении заголовка и фона

#swift #macos #swiftui

#swift #macos #swiftui

Вопрос:

Я пытаюсь сделать так, чтобы мой заголовок и фон исчезли.

Я использую приведенный ниже код для этой цели, но у него есть 2 большие проблемы с ним:

  • Во-первых, все еще существует некоторая тень от заголовка.
  • Во-вторых, когда я запускаю свой код, в течение некоторого короткого времени (около 0,1-0,2 секунды) отображается окно с фоном и заголовком, и как только NotificationCenter отправляет уведомление, оно начинает работать.

Как я могу решить эту проблему?

   @main
struct Work_Space_macOSApp: App {
    
    var body: some Scene {
        WindowGroup {
            ContentView()
                .onReceive(NotificationCenter.default.publisher(for: NSApplication.willUpdateNotification), perform: { _ in
                    makeWindow()
                })
        }
    }
}


struct ContentView: View {
    var body: some View {
        Circle()
            .fill(Color.black)
    }
}

func makeWindow() {
    for window in NSApplication.shared.windows {
        window.titleVisibility = .hidden
        window.titlebarAppearsTransparent = true
        window.backgroundColor = NSColor.clear
        window.standardWindowButton(NSWindow.ButtonType.zoomButton)!.isHidden = true
        window.standardWindowButton(NSWindow.ButtonType.closeButton)!.isHidden = true
        window.standardWindowButton(NSWindow.ButtonType.miniaturizeButton)!.isHidden = true
    }
}
 

введите описание изображения здесь

Комментарии:

1. С «призрачной» строкой заголовка можно справиться, установив window.hasShadow = false в makeWindow функции.

2. @tromgy: это не решает проблему.

3. Вы все еще видите тень заголовка?

4. Да, конечно. Вы тестировали свой код?

5. Конечно, тень исчезла из строки заголовка, а также из круга: imgur.com/a/hnpQqEF macOS Big Sur 11.6, XCode 13.1