Подтвердить что ты не робот

Добавить Subview в NSWindow Titlebar

Я хочу создать пользовательскую панель инструментов Window, но без использования реального NSToolbar (потому что в некоторых случаях он не работает корректно для моих нужд, и я не могу его стилизовать так, как я хочу), поэтому мне нужно добавить subview в заголовок окна. Он должен выглядеть следующим образом: Screenshot of custom Toolbar

Возможный путь:

[[[_window contentView] superview] addSubview:_titlebarView];

но у этой проблемы есть предупреждение о том, что она вызывает предупреждение в Yosemite (NSWindow warning: adding an unknown subview: <NSView: 0x608000122b20>), поэтому это не похоже на правильный способ сделать это.

В настоящее время я добавляю представление панели инструментов к виду заголовка:

[[[_window standardWindowButton:NSWindowCloseButton]
    superview] addSubview:_titlebarView];

но это тоже не так.

Поскольку мое приложение предназначено только для OS X 10.10 (Yosemite), мне было бы полезно использовать API только для Yosemite, поэтому я посмотрел на NSTitlebarAccessoryViewController, и мне удалось успешно подклассифицировать его и использовать его с NSWindow addTitlebarAccessoryViewController:. При таком подходе остается одна проблема, возможные значения для layoutAttribute:

  • NSLayoutAttributeBottom
    Добавляет представление в нижней части окна заголовка окна, сохраняя высоту представления.
  • NSLayoutAttributeRight
    Добавляет представление справа от заголовка окна, обрезая представление на высоту строка заголовка.

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

Каков рекомендуемый способ сделать это? Я бы предпочел пойти с официальным API и использовать подход AccessoryViewController, если бы было возможно иметь представление больше, чем панель заголовков по умолчанию.

4b9b3361

Ответ 1

это просто NSToolBar. в Yosemite, когда window.title.titleVisibility = .Hidden, NSToolBar станет заголовком

Ответ 2

WAYAppStoreWindow может выполнить то, что вы ищете. Это было явно построено, чтобы избежать предупреждения subview в Yosemite, указать настраиваемую высоту заголовка окна и добавить subviews в заголовок.

Ответ 3

Спасибо @ePirat

Добавление подзаголовков в их заголовокbarView будет таким же, как и при выполнении

[[[_window standardWindowButton:NSWindowCloseButton] superview] addSubview:_customTitlebarView];

Ответ 4

Назначьте свое окно для самостоятельного просмотра. а затем добавьте subview с рамкой позже предоставить требуемую функциональность