Как удалить кнопку развертывания, свертывания и закрытия в macOS Big Sur в жизненном цикле SwiftUI?

Я работаю над проектом по удалению кнопок развертывания, свертывания и закрытия, которые мы видим в каждом окне в каждом проекте, построенном с помощью Xcode Версия 12.4 (12D4e), последняя версия на данный момент для macOS Big Sur в SwiftUI. Как я мог это сделать?


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


PS: Учтите, что я кодирую SwiftUI-жизненный цикл / macOS Big Sur, и если ваш код или способ несовместимы с этим, я не смогу его использовать. спасибо за помощь и ваше время.


person swiftPunk    schedule 31.03.2021    source источник
comment
Пожалуйста, используйте это с осторожностью.   -  person Alexander    schedule 31.03.2021
comment
@Clashsoft: допустим, мы пытаемся найти ответ на этот вопрос, и я бы уведомил вас, когда мне понадобится ваше мнение или суждение о UX.   -  person swiftPunk    schedule 31.03.2021
comment
Прошу предотвратить возможную проблему XY. Иногда люди задают эти вопросы не потому, что они хотят скрыть эти кнопки по тем или иным причинам, а потому, что они действительно хотят реализовать что-то, чего, естественно, их нет. Например, экран запуска или всплывающее окно подтверждения. В этом случае им следовало спросить, как реализовать эту вещь, а не как решить проблему, которая возникла при попытке ее воспроизвести.   -  person Clashsoft    schedule 31.03.2021
comment
@Clashsoft: это снова то же самое, что мы пытаемся найти ответ, и мы не говорим о варианте использования, по крайней мере, я не говорю.   -  person swiftPunk    schedule 31.03.2021
comment
Уродливый взлом, var body: some View { VStack {}.sheet(isPresented: .constant(true)) { Text("This is a window ????").frame(width: 400, height: 400)}}   -  person Joakim Danielson    schedule 31.03.2021


Ответы (1)


Вам просто нужно удалить .closable, .miniaturizable и .resizable из маски стиля окна в делегате приложения:

window = NSWindow(
        contentRect: NSRect(x: 0, y: 0, width: 480, height: 300),
        styleMask: [.titled, .fullSizeContentView],
        backing: .buffered, defer: false)

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

person Leo Dabus    schedule 31.03.2021
comment
спасибо, Лео, но у меня нет делегата приложения, в SwiftUI такого больше нет - person swiftPunk; 31.03.2021
comment
Это зависит от того, какой жизненный цикл вы выбрали при создании своего проекта. Вы, наверное, говорите о приложении SwiftUI. Если вы используете AppKit App Delegate, вы можете сделать, как показано выше. - person Leo Dabus; 31.03.2021
comment
Я знаю это, но я нахожусь в чистом жизненном цикле SwiftUI и SwiftUI. Я просто добавляю слово жизненный цикл SwiftUI к своему вопросу, честно говоря, я думал и думаю, что мне не нужно использовать это слово, потому что, когда мы говорим о SwiftUI, мы говорим о Жизненный цикл SwiftUI, иначе мы должны явно сказать SwiftUI - AppKit App Delegate. - person swiftPunk; 31.03.2021
comment
потому что, когда мы говорим о SwiftUI, мы говорим о жизненном цикле SwiftUI. Вероятно, нет. Я бы сказал, что большинство приложений SwiftUI на сегодняшний день по-прежнему используют жизненный цикл AppKit, потому что жизненный цикл SwiftUI настолько нов. Но да, я не думаю, что этот ответ подойдет для вашего варианта использования. Я думаю, что эквивалент NSWindow равен Scene. Вы пробовали посмотреть его API? - person Alexander; 31.03.2021
comment
Да, я пробовал работать с NSView, с которым никогда раньше не работал, например, я мог сделать эффект размытия. Также посмотрите на это: developer.apple.com/design/human-interface-guidelines/macos/, но я ничего не нашел, а затем просмотрел каждую ссылку, которая гугл мог предложить, тогда я задал этот вопрос - person swiftPunk; 31.03.2021