Я хочу создать пользовательскую панель инструментов 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, если бы было возможно иметь представление больше, чем панель заголовков по умолчанию.