Ответ 1
это просто NSToolBar. в Yosemite, когда window.title.titleVisibility = .Hidden
, NSToolBar станет заголовком
Я хочу создать пользовательскую панель инструментов Window, но без использования реального NSToolbar (потому что в некоторых случаях он не работает корректно для моих нужд, и я не могу его стилизовать так, как я хочу), поэтому мне нужно добавить subview в заголовок окна.
Он должен выглядеть следующим образом:
Возможный путь:
[[[_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, если бы было возможно иметь представление больше, чем панель заголовков по умолчанию.
это просто NSToolBar. в Yosemite, когда window.title.titleVisibility = .Hidden
, NSToolBar станет заголовком
WAYAppStoreWindow может выполнить то, что вы ищете. Это было явно построено, чтобы избежать предупреждения subview в Yosemite, указать настраиваемую высоту заголовка окна и добавить subviews в заголовок.
Спасибо @ePirat
Добавление подзаголовков в их заголовокbarView будет таким же, как и при выполнении
[[[_window standardWindowButton:NSWindowCloseButton] superview] addSubview:_customTitlebarView];
Назначьте свое окно для самостоятельного просмотра. а затем добавьте subview с рамкой позже предоставить требуемую функциональность