Размер подпредставления NSSplitView программно ограничен размером контейнера NSSplitView - PullRequest
2 голосов
/ 27 января 2011

Трудно выразить эту проблему словами, но пример из реальной жизни поможет.Если вы посмотрите на приложение iTunes, оно выглядит как NSSplitView для разделения Sidebar | Content и вложенное NSSplitView для списка источников и панели иллюстраций.

enter image description here ======> enter image description here

Когда вы перетаскиваете разделитель, чтобы сделать боковую панель более тонкой, вид графического объекта (нижняя половина внутреннего NSSplitView) укорачивается для поддержания правильного соотношения сторон.Это то поведение, за которым я следую.

Я подключил внешний NSSplitView delegate, чтобы он указывал на sideBarController, чтобы я мог получить изменения размеров и программно изменить размер нижней части разделенного вида., У меня эта половина проблемы работает правильно, , то есть, когда я меняю боковые панели, ширину, панели боковых панелей соответственно меняют свой размер.

Проблема, с которой я сталкиваюсь, заключается в атакекак изменить ширину боковой панели при изменении высоты вложенного NSSplitView.Первоначально я пытался найти способы сделать этот внутренний разделитель неразборным, но не смог найти никакого способа сделать это.Теперь я настроил его так, чтобы делегатом внутреннего скроллвью было окно windowController, которому принадлежит основной splitview, а затем вычислил высоту, чтобы изменить ширину информационной панели.

Конечно, изменениеОдин размер заставляет другой разделенный вид изменять его размер, который снова изменяет размер оригиналов, и создается бесконечный цикл.Я мог бы добавить флаги и таймеры, чтобы попытаться решить эту проблему, но уже похоже, что я собираюсь здесь повторить эту задачу для достижения этой функциональности.

Как правильно ограничить вложенную панель splitview до ее родительской ширины илив общем, Каков наилучший способ дублирования поведения изменения размера в представлении iTunes «Выбранный элемент / сейчас воспроизводится»?

1 Ответ

3 голосов
/ 27 января 2011

Вы можете попробовать взглянуть на мой CHLayoutManager , который позволит вам:

[mySplitView setLayoutName:@"splitview"];
CHLayoutConstraint *constraint = [CHLayoutConstraint constraintWithAttribute: CHLayoutConstraintAttributeHeight relativeTo:@"splitview" attribute: CHLayoutConstraintAttributeWidth];
[mySplitView addConstraint:constraint];

Теперь, когда ваш mySplitView изменяет размер, он автоматически обновляет высоту вида в соответствии с шириной.

Возможно, вам придется сделать что-то более сложное для вашей ситуации, но это общая идея.

...