Если вы войдете в систему
NSLog(@" %@", [[self.window.contentView superview] subviews]);
Вы получите
NSToolbarView не автоматически изменяет размеры своих подпредставлений, поэтому у вас возникают проблемы с его центрированием.И [self.window.contentView superview]
не содержит вид панели инструментов в полноэкранном режиме.
Вы можете добавить нужный вид в центре панели инструментов к [self.window.contentView superview]
, когда он не в полноэкранном режиме, и правильно расположить его.Это будет автоматически изменять размер и оставаться в центре.При переключении в полноэкранный режим удалите его из [self.window.contentView superview]
и добавьте его в NSToolbarView по центру таким образом, чтобы он оставался на панели инструментов, и он также перемещается вниз вместе с панелью инструментов при открытии строки состояния.
Вы можете получить представление панели инструментов, перебирая подпредставления или используя приватный метод
[[self.window toolbar] performSelector:@selector(_toolbarView)];
Обновление: я немного больше покопался в отладчике и обнаружил, что это то, чтоXcode делает.По крайней мере пока не в полноэкранном режиме.
thealch3m1st$ sudo lldb
(lldb) process attach -p 11478
Process 11478 stopped
Executable module set to "/Applications/Xcode.app/Contents/MacOS/Xcode".
Architecture set to: x86_64.
(lldb) po [NSApplication sharedApplication]
(id) $0 = 0x000000040013f5e0 <IDEApplication: 0x40013f5e0>
(lldb) po [$0 mainWindow]
(id) $1 = 0x0000000000000000 <nil>
(lldb) po [$0 windows]
(id) $2 = 0x0000000408278460 <__NSArrayM 0x408278460>(
<IDEWelcomeWindow: 0x40141c1e0>,
<IDEWorkspaceWindow: 0x401ef2780>,
<NSComboBoxWindow: 0x402019be0>,
<NSWindow: 0x4022adc60>,
<IDEOrganizerWindow: 0x402951b20>
)
(lldb) po [$0 windows]
(id) $3 = 0x0000000408820300 <__NSArrayM 0x408820300>(
<IDEWelcomeWindow: 0x40141c1e0>,
<IDEWorkspaceWindow: 0x401ef2780>,
<NSComboBoxWindow: 0x402019be0>,
<NSWindow: 0x4022adc60>,
<IDEOrganizerWindow: 0x402951b20>
)
(lldb) [$3 objectAtIndex:1]
error: '[$3' is not a valid command.
(lldb) po [$3 objectAtIndex:1]
(id) $4 = 0x0000000401ef2780 <IDEWorkspaceWindow: 0x401ef2780>
(lldb) po [$4 contentView]
(id) $5 = 0x0000000401ef0920 <NSView: 0x401ef0920>
(lldb) po [$5 superview]
(id) $6 = 0x0000000401ef2e20 <NSThemeFrame: 0x401ef2e20>
(lldb) po [$6 subviews]
(id) $7 = 0x0000000401ef3800 <__NSArrayM 0x401ef3800>(
<_NSThemeCloseWidget: 0x401ef3120>,
<_NSThemeWidget: 0x401ef3b80>,
<_NSThemeWidget: 0x401ef40e0>,
<NSView: 0x401ef0920>,
<IDEActivityView: 0x4020cd700>,
<_NSThemeFullScreenButton: 0x402017b20>,
(<NSToolbarView: 0x4020192e0>: Xcode.IDEKit.ToolbarDefinition.Workspace),
<DVTDualProxyWindowTitleView: 0x40225e0a0>,
<NSThemeDocumentButton: 0x402698020>
)
(lldb) po [$7 objectAtIndex:4]
(id) $8 = 0x00000004020cd700 <IDEActivityView: 0x4020cd700>
(lldb) [$8 setHidden:YES]
error: '[$8' is not a valid command.
(lldb) po [$8 setHidden:YES]
(id) $9 = 0x0000000000000000 <nil>
(lldb) continue
Process 11478 resuming
(lldb)
И вид деятельности исчез:)
Однако в полноэкранном режиме.Он не добавляет его в NSToolbarView, он добавляет его в NSNextStepFrame, который является суперпредставлением NSToolbarView.Панель инструментов не содержится в суперпредставлении окна просмотра в полноэкранном режиме.Я думаю, что это как-то связано с полноэкранным поведением и пробелами.