Определить, когда «Показать панель вкладок» NSWindow включен - PullRequest
0 голосов
/ 20 апреля 2019

У меня есть окно с ограниченной высотой: оно не может расти выше определенной высоты (в зависимости от его текущего содержимого), но может быть уменьшено (в этом случае я добавлю вертикальную полосу прокрутки).

Я ограничиваю максимальную высоту NSLayoutConstraint.

Теперь, если пользователь включает управление окнами с вкладками, проверяя команду меню View -> Show Tab Bar, содержимое окна перемещается вниз, чтобы освободить место для панели вкладок, но высота всего окна остается той же, что фактически приводит к тому, что содержимое становится «сжатым», поэтому мой текущий код решает добавить вертикальную полосу прокрутки, как будто пользователь просто уменьшил высоту окна вручную.

Вместо этого у меня есть окно с вкладкой панели. Как мне это сделать?

Кажется, что нет событий или уведомлений, которые бы информировали меня о включении панели вкладок.

Каков чистый способ обнаружения активации панели вкладок, чтобы я мог увеличивать высоту окна вместе с ней?

1 Ответ

0 голосов
/ 20 апреля 2019

Я покопался в KVO и обнаружил, что могу посмотреть свойство NSWindow tabbedWindows для этой цели (проверено на 10.13.6).

В ViewController viewWillAppear:

if ([self.view.window respondsToSelector:@selector(tabbedWindows)]) {
    [self.view.window addObserver:self forKeyPath:@"tabbedWindows" options:0 context:nil];
}

А затем обработайте изменение:

-(void)observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object change:(id)change context:(void*)context {
    // ... adjust my window's height
}

Это может быть ненадежно, т. Е. Я не нашел документации, которая гарантировала бы, что это будет работать в будущем, а не является случайной сторонойэффект.

...