2013-06-25 3 views
2

У меня есть следующее исполнение с пружинами и распорками, а также несколько способов изменения размера и ограничения NSSplitViewDelegate, и все это работает по своему желанию. Теперь я пытаюсь принять autolayout для этого же сценария, заменив все сообщения setFrame и NSSplitViewDelegate с соответствующими autolayout ограничениями.Неожиданное поведение с использованием Autolayout с NSSplitView

Мое представление главного окна содержит вертикальное разделенное представление (я называю OuterSplitter) с верхними, нижними, левыми и правыми ограничениями верхнего и нижнего пробелов, установленными на ноль для OuterSplitter для его супервизора.

Правая панель OuterSplitter содержит (среди нескольких других вещей) еще один вертикальный разрез (я называю InnerSplitter), который также имеет верхние, нижние, левые и правые ограничения для верхнего и нижнего пространства, установленные для нуля для InnerSplitter, на его superview (т.е. правой панели OuterSplitter).

Я установил минимальные ограничения минимальной ширины для левой панели OuterSplitter, а также для левой и правой панелей InnerSplitter.

При изменении размера главного окна желаемое поведение предназначено для всех (или большинства) расширения и сжатия для применения к левой панели InnerSplitter, если только одно из ограничений минимальной ширины не вступит в силу. Поэтому я установил для параметра «Верхний приоритет» «Слой» приоритет для левой панели «OuterSplitter» значение 260 (самый высокий) и 250 для правой панели. Кроме того, приоритет удержания для левой панели InnerSplitter до 245 (самый низкий) и 255 для правой панели.

Я смотрел видео для сеанса 232 от WWDC 2012 и думал, что я на правильном пути. Мои ограничения autolayout работают в основном по желанию, но есть одно очень странное поведение, которое не происходит с моей версией springs и struts.

Если разделительная панель InnerSplitter находится как можно правее (правая панель InnerSplitter имеет минимальный размер), а разделительная панель OuterSplitter НЕ так далеко, насколько это возможно, тогда, если вы попытаетесь перетащить Разделительный бар InnerSplitter дальше вправо, а затем неожиданно сплит-панель OuterSplitter перемещается влево, чтобы левая панель InnerSplitter увеличивалась, а левая панель OuterSplitter уменьшалась. Мое ожидание заключается в том, что в этом случае изменение размера не должно происходить.

Можно ли перемещать сплит-панель OuterSplitter при перемещении по разделительной панели InnerSplitter, которая закреплена вправо? Если да, то какие ограничения следует добавить? Или нужны некоторые из методов NSSplitViewDelegate? Благодарю.

BTW, я использую Xcode 4.6.3 и настраиваю OSX 10.8.

+0

Вот демон барабанной кости: https: // github.com/Whiffer/Test-Autolayout –

ответ

0

У меня была такая же проблема и обойти ее, используя NSViewControllers в каждой области просмотра сплита, так что у меня не было прямого разделения взглядов, встроенных в разделенные виды. Это больше кода и сложнее, но, похоже, он работает.

Я никогда не нашел решение, когда сплит-представления встроены в разделенные виды, поэтому мне будет интересно, есть ли у кого-нибудь ответ.

+0

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

0

Чтобы исправить это, вы можете добавить явное ограничение ширины на -mouseDown: в NSSplitView перед вызовом super, а затем удалить его сразу же после.


Кроме того, похоже, что это исправлено в бета-версии 10.11!