Я полностью осознаю, что этот вопрос старый и Валентин Шергин ответ - правильный .Он предотвращает использование любого частного API , в отличие от , который Google сделал в Chrome .Просто хотел поделиться методом для тех, кто не чувствует себя подклассом NSView
, просто поместить эти кнопки в существующее представление (например, self.window.contentView
).
Как я только хотел изменить положение NSWindowButton
s через setFrame:
, я обнаружил, что как только окно было изменено в размере , области отслеживания, кажется, " fix " сами автоматически , безлюбое использование частного API (по крайней мере, в 10.11).
Таким образом, вы можете сделать что-то вроде следующего, чтобы применить " fake resize " к окну, в котором вы переместили свои кнопки:
NSRect frame = [self.window frame];
frame.size = NSMakeSize(frame.size.width, frame.size.height+1.f);
[self.window setFrame:frame display:NO animate:NO];
frame.size = NSMakeSize(frame.size.width, frame.size.height-1.f);
[self.window setFrame:frame display:NO animate:YES];
(я сделал это в главном окне NSWindowDelegate
windowDidBecomeMain:
. Должно работать, пока окно загружено и видно .)