Как скрыть строку меню в приложении Cocoa?

Как программно скрыть строку меню в приложении какао? Я хотел бы в полной мере использовать площадь экрана.


person uchuugaka    schedule 26.12.2013    source источник
comment
Вы про строку состояния?   -  person kb920    schedule 26.12.2013
comment
Вроде, как бы, что-то вроде. Это часть строки меню.   -  person uchuugaka    schedule 26.12.2013
comment
Перейдите к набору файлов name.plist вашего проекта. Просмотр внешнего вида строки состояния на основе контроллера = НЕТ   -  person kb920    schedule 26.12.2013
comment
Это ключ LSUElement   -  person uchuugaka    schedule 26.12.2013


Ответы (2)


Я знаю два хороших способа сделать это.

1 В Cocoa вы можете вызвать метод класса NSMenu setMenuBarVisible:, чтобы отобразить или скрыть строку меню.

На момент написания этой статьи документация для класса NSMenu не сообщает вам следующую дополнительную информацию.

Строка меню будет скрыта только для приложения, вызывающего этот метод. В то же время Dock будет также скрыт.

(Это верно по крайней мере для 10.9, и я не тестировал другие версии.)

Это полезно, когда вы хотите использовать приложение в полноэкранном режиме, когда у вас есть окно-обложка, окно без полей размером с экран. Приятная особенность этого (в отличие от игры с настройками LSUIElement) заключается в том, что ваше приложение может продолжать циклически переключаться между приложениями, а также отображаться в доке, когда другие приложения активны. Это позволяет пользователям по-прежнему активировать полноэкранное приложение с помощью Dock или переключателя приложений. Это означает, что вы по-прежнему можете использовать меню Dock вашего приложения для доступа к окну настроек вашего приложения или другим функциям. Это невероятно удобно, если ваше приложение действительно является полноэкранным окном, которое работает на уровне окна выше, чем другие приложения, но вы все еще хотите сделать настройки и возможность выхода из приложения доступными, и вы хотите, чтобы визуальные функции вашего приложения были доступны, когда другие приложения активны.

2 Другим вариантом является использование метода setPresentationOptions: NSApplication с аргументами из NSApplicationPresentationOptions перечисления, такими как опция NSApplicationPresentationHideMenuBar. только, нужно знать, что некоторые из опций взаимоисключающие. Есть правила, которым вы должны следовать, иначе вы не получите ничего, кроме исключений, выброшенных на консоль.

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

person uchuugaka    schedule 26.12.2013
comment
Существует более одного полноэкранного механизма. Окно обложки — это не то же самое, что использование полноэкранного метода NSWindow. - person uchuugaka; 26.12.2013

Существует также метод NSView enterFullScreenMode:withOptions:, хотя большинство приложений, для которых он подходит до 10.7, вероятно, должны использовать современный полноэкранный API в 10.7 и более поздних версиях.

person Peter Hosey    schedule 27.12.2013
comment
Согласен с API NSWindow. Меня все еще немного раздражает, что панель меню должна иметь те же настройки, что и док-станция. Главным образом то, что частные функции, доступные для пользовательского центра уведомлений и панели запуска, недоступны публично. Я создал что-то похожее на центр уведомлений пользователей, но кажется трудным или невозможным попытаться получить что-то подобное с общедоступными API, где панель меню активного приложения остается активной, а док-станция и основной дисплей остаются визуально активными, хотя и перемещаются. Понятно, что у Apple есть свои хуки в приватном окне или графическом контексте. :( - person uchuugaka; 27.12.2013