Скрыть NSToolbar в полноэкранном режиме

Я делаю приложение Cocoa со скрытой унифицированной панелью NSToolbar и заголовком. Я сделал это, добавив панель инструментов в оконный контроллер и установив все параметры, чтобы сделать ее невидимой и сохранить 3 цветные кнопки. Он отлично работает в обычном окне, но если я разверну это окно в полноэкранном режиме, вверху появится пустая панель инструментов.

Как сделать эту панель инструментов прозрачной в полноэкранном режиме?

Это возможно, так как это работает в новом Mac AppStore в macOS Mojave (есть скрытая панель инструментов, которая по-прежнему скрыта в полноэкранном режиме и появляется только при наведении мыши на верхнюю часть экрана).

Бонус: я включил isMovableByWindowBackgroundable, но есть ли возможность переключать действие «развернуть» при двойном щелчке по фону окна, как это обычно работает для заголовка?

Вот картинки:

Как это выглядит с прозрачной панелью инструментов

Как это выглядит в полноэкранном режиме, панель инструментов непрозрачна


person Herlid    schedule 06.11.2018    source источник


Ответы (2)


Вы можете добиться того же эффекта, что и в Mac App Store, установив делегат NSWindow и реализовав:

func window(_ window: NSWindow, willUseFullScreenPresentationOptions proposedOptions: NSApplication.PresentationOptions = []) -> NSApplication.PresentationOptions {
    return [.autoHideToolbar, .autoHideMenuBar, .fullScreen]
}

Это скроет панель инструментов и строку меню, а в полноэкранном режиме появится только тогда, когда мышь находится в верхней части экрана. Обновления представления могут потребоваться для обновления содержимого, но это необязательно.

person Nick Bellucci    schedule 16.06.2019
comment
Работает отлично. Здесь то же самое в ObjC: - (NSApplicationPresentationOptions) окно: (NSWindow *) окно willUseFullScreenPresentationOptions: (NSApplicationPresentationOptions)proposedOptions { return NSApplicationPresentationAutoHideToolbar | NSApplicationPresentationAutoHideMenuBar | NSApplicationPresentationFullScreen; } - person Holtwick; 26.07.2019
comment
Здоровья, приятель! Сделал мою неделю! - person marcelosarquis; 03.09.2019

Я предполагаю, что вы ищете такую ​​конфигурацию окна.

window!.titleVisibility = .hidden
window!.titlebarAppearsTransparent = true
window!.styleMask = [window!.styleMask,  NSWindow.StyleMask.fullSizeContentView]

Вы бы добавили этот код в свой NSWindowControllers windodDidLoad()

В приложении Mac App Store я не вижу никакой панели инструментов. Если вы не хотите отображать панель инструментов, вам не нужно добавлять NSToolbar в окно.

РЕДАКТИРОВАТЬ:

Чтобы получить представление и изменить цвет, вы можете использовать код ниже в windowDidLoad. Конечно, требуется более тонкая настройка, чтобы получить его на 100%, как в окне Mac App Store, и не рекомендуется использовать фиксированный цвет.

let button = window?.standardWindowButton(NSWindow.ButtonType.closeButton)
let containerView = button?.superview?.superview // NSTitlebarContainerView
containerView?.layer?.backgroundColor = CGColor.init(gray: 0.9, alpha: 1.0)

Надеюсь это поможет.

person Marc T.    schedule 06.11.2018
comment
Ваш код действительно может скрыть строку заголовка, но кнопки «Закрыть/свернуть/развернуть» находятся в верхнем левом углу. Я хочу, чтобы они были такими, какие они есть, когда есть единая панель инструментов. Я могу добиться этого, добавив пустую панель инструментов, и с тем же кодом, который вы предоставили, она невидима, как я хочу, но если я перехожу в полноэкранный режим, панель инструментов снова появляется, тогда как без панели инструментов панель заголовка исчезает, но 3 кнопки не там, где я хочу, чтобы они были. - person Herlid; 06.11.2018
comment
Для Mac App Store тот факт, что кнопки находятся там, где они должны быть, если бы была панель инструментов, и если вы переходите в полноэкранный режим и наводите мышь вверху, панель, которая скользит вниз, показывает Закрыть/свернуть/ кнопки максимизации — это размер единой панели инструментов (полупрозрачной). Это заставляет меня думать, что они используют прозрачную панель инструментов. - person Herlid; 06.11.2018
comment
Вы правы, выглядит несколько иначе. Я расширил свой ответ, чтобы показать, как вы можете получить доступ и изменить цвет представления. Я нашел способ получить правильный вид. - person Marc T.; 06.11.2018
comment
При этом я могу изменить цвет панели, но в полноэкранном режиме это не действует. Я хочу, чтобы панель инструментов исчезла в полноэкранном режиме. Я не уверен, что этого можно добиться, изменив цвет :/ - person Herlid; 07.11.2018
comment
Как насчет вашего первоначального вопроса - Как сделать эту панель инструментов прозрачной (невидимой) в полноэкранном режиме? Вы получите именно это, а также внешний вид приложения App Store, если будете следовать тому, что я вам предложил. Но если вы хотите сделать окно с панелью инструментов, не имея панели инструментов, я могу только пожелать вам удачи. - person Marc T.; 07.11.2018
comment
Панель инструментов прозрачна в обычном окне, но становится непрозрачной в полноэкранном режиме. Ваш код может изменить цвет фона, но если я установлю альфу на 0, он все равно будет непрозрачным в полноэкранном режиме. Я обновил свой пост с фотографиями. - person Herlid; 07.11.2018