Как изменить высоту заголовка NSWindow? - PullRequest
8 голосов
/ 09 января 2011

Я хочу изменить высоту заголовка окна NSWindow.

Вот несколько примеров: alt text

И ...

alt text

Я мог бы использовать NSToolbar, но проблема в том, что я не могу разместить представления очень высокой высоты (например: я не могу разместить сегментированный элемент управления выше, чем на рисунке, потому что заголовок все еще есть) alt text

Если я уберу заголовок, я не смогу разместить NSToolbar, и окно не будет подвижным.

У вас есть идеи?

Ответы [ 4 ]

23 голосов
/ 25 сентября 2012

Это намного проще, чем можно подумать. Я тоже отправился на поиски чего-то похожего для моего приложения.

Приложение Real App Store: Here is the App Store app...

Мой App Store похож на: My App Store look-alike...

Нет неуважения к INAppStoreWindow, это очень хорошая реализация и надежная. Единственный недостаток, который я увидел из этого, был то, что было много кода для рисования наряду с жестко заданными настройками для цветов TitleBar, которые Apple может настроить в любое время.

Так вот как я это сделал:

A) Создайте стандартное окно с полями заголовка, «Закрыть», «Свернуть», «Тень», «Изменить размер», «Полный экран» - «Главное окно». Примечание: вам не нужно текстурированное окно, и вы не должны устанавливать заголовок

B) Затем добавьте стандартную панель инструментов со следующими настройками:

  • Icon Only
  • Отображается при запуске - ON
  • Настраиваемый - OFF
  • Разделитель - ВКЛ.
  • Размер - Обычный

Удалите все элементы панели инструментов и добавьте только их в следующем порядке

NSSegmentControl (51 x 24) - | Гибкое пространство | - NSSearchField (150 x 25)

C) В вашем представлении содержимого прямо под панелью инструментов добавьте NSButton обычного размера, например, так:

  • Ограничено - ВЫКЛ.
  • Прозрачный - ВЫКЛ.
  • Заголовок -
  • Изображение -
  • Положение - текст под кнопкой
  • Шрифт - System Small 11

Хорошо, пока довольно легко, правда?!

В вашем контроллере окна или в приложении-делегате .... настроить IBOutlet (s) на ваши NSButton (s)

Примечание: не забудьте подключить свой IBOutlet в конструкторе интерфейсов

Хорошо, не пугайтесь, теперь мы должны написать немного кода:

В пробуждении из Nib или windowDidLoad ....

  1. Получить суперпредставление представлений контента (он же NSThemeView)
  2. Удалите свою кнопку из своего superView
  3. Установить рамку своей кнопки
  4. Добавить кнопку назад к просмотру темы

Таким образом, код будет выглядеть примерно так:

NSView *themeView = [self.contentView superview];
NSUInteger adj = 6;

[self.btnFeatured removeFromSuperview];
self.btnFeatured.frame = NSMakeRect( self.btnFeatured.frame.origin.x,
                              self.window.frame.size.height - self.btnFeatured.frame.size.height - adj,
                              self.btnFeatured.frame.size.width, self.btnFeatured.frame.size.height);
[themeView addSubview:self.btnFeatured];

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

P.S. Никакие частные рамки не использовались в этой публикации вообще!

4 голосов
/ 26 апреля 2011

INAppStoreWindow - это подкласс NSWindow, он говорит вам, как изменить высоту строки заголовка.

https://github.com/indragiek/INAppStoreWindow

http://iloveco.de/adding-a-titlebar-accessory-view-to-a-window/
В этом примере показано, как добавить кнопкив строке заголовка.

4 голосов
/ 09 января 2011

Вы должны были бы создать подкласс NSWindow и сделать собственный чертеж оконной рамы.Это не только заголовок.Речь идет о целой оконной раме (так что, на самом деле, вы можете поместить кнопки закрытия / сворачивания / масштабирования внизу, если хотите).

Хороший стартер на сайте "Какао с любовью" .

2 голосов
/ 15 января 2017

Существует несколько новых решений, основанных на INAppStoreWindow и без предупреждения и сообщения журнала, для тех, кто хочет изменить высоту NStitlebar, изменить положение светофора, добавить элемент (например, NSbutton) на NStitlebar и изменить его положение, пожалуйста, проверьте ниже.

WAYWindow: https://github.com/weAreYeah/WAYWindow

NStitlebar_with_item: https://github.com/ZHANGneuro/NStitlebar_with_item

...