Как мне реализовать NSSplitView с 3 панелями с минимальными и максимальными размерами?

Я хочу реализовать 3-х вертикаль NSSplitView (очень похоже на Mail.app). Я не совсем уверен, с чего начать. Я уверен, что мне нужно реализовать NSSplitViewDelegate, но я не уверен, какие методы и / или их реализации.

Макет, который я хочу, следующий:

+----------+------------------+------------------------------------+
|          |                  |                                    |
|          |                  |                                    |
|          |                  |                                    |
|          |                  |                                    |
|  Pane 1  |      Pane 2      |               Pane 3               |
|          |                  |                                    |
|          |                  |                                    |
|          |                  |                                    |
|          |                  |                                    |
|          |                  |                                    |
+----------+------------------+------------------------------------+

Я хочу реализовать следующие ограничения для каждой панели:

  • Панель 1: минимум 140pt. Максимум: 400pt.
  • Панель 2: минимум 250pt.
  • Панель 3: минимум 400pt.

Любые указатели будут высоко оценены.

4 ответа

Это довольно просто в Xcode 8.2.1

  1. Просто добавьте Split View Controller в Интерфейсном Разработчике.
  2. Добавить дополнительный View Controller,
  3. Crtl + нажатие мыши на Split View Controller и перетащите к дополнительному View Controller,
  4. Выбрать split items,

Вот и все.

Чтобы обеспечить минимальный размер, проверьте созданный нами служебный класс https://github.com/incbee/BESplitViewConstraintEnforcer.

Кстати, если вы хотите избежать вложения разделенных видов и вместо этого добавить дополнительную панель в Интерфейсном Разработчике, перетащите новый вид в объект разделенного представления, как показано на снимке экрана ниже.

Скриншот

На самом деле, HTH вдохновил меня попробовать третью возможность в Интерфейсном Разработчике, и оказалось, что она прекрасно работает. В частности, перемещение одного разделителя не вносит никаких непреднамеренных изменений в другом месте, что может легко произойти, если вы вложите разделенные представления.

  • Добавить NSSplitView к твоему окну,
  • Добавить NSView (пользовательский вид в IB) как дочерний элемент вида Split. Вы получите разделенное представление, которое имеет три, а не два подпредставления.

Как это выглядит в списке объектов IB

То же самое работает, если вы добавите еще NSSplitView как ребенок, хотя вы должны быть осторожны, как вложенные разделенные представления влияют друг на друга. Изображение выше показывает, как это будет выглядеть в конструкторе интерфейсов, второе показывает результат в симуляторе.

Результат

Я думаю, что вы это решили. Во всяком случае, есть два пути. Первый аналогичен ответу выше, перетащите разделенное представление туда, куда вы хотите, и перетащите второе разделенное представление внутри одного из контейнеров (подпредставление разделенного просмотра). Иерархия представления похожа

Window 
Window containerview
        Splitview
            Containerview_left | containerview_right
                                    Splitview
                                        Containerview_left | containerview_right

Если вы по коду, то вы создаете splitview, добавляете его как подпредставление окна, view. Затем вы создаете подпредставления splitview, добавляя их с помощью [splitview addubview], если вы добавляете три подпредставления, у вас есть два делителя. Иерархия отличается.

Window  Window containerview
         Splitview
             Containerview_ind(0)| Containerview_ind(1) | Containerview_ind(2)

Это означает, что если вы хотите найти подпредставление, вы должны знать, как вы его создали.

НТН

Другие вопросы по тегам