8

我想实现一个 3 窗格垂直NSSplitView(非常类似于 Mail.app)。我不确定从哪里开始。我很确定我需要实现 a NSSplitViewDelegate,但我不确定哪些方法和/或它们的实现。

我想要的布局如下:

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

我想为每个窗格实现以下约束:

  • 窗格 1:最小 140pt。最大:400pt。
  • 窗格 2:最小 250pt。
  • 窗格 3:最低 400pt。

任何指针将不胜感激。

4

4 回答 4

9

To enforce a minimum size, check out the BESplitViewConstraintEnforcer utility class we created.

By the way: if you want to avoid nesting split views and instead add an additional pane in Interface Builder, drag the new view into the split view object, as shown in the screenshot below.

Screenshot

于 2013-05-13T13:07:14.487 回答
9

在 Xcode 8.2.1 中非常简单

  1. 只需Split View Controller在 Interface Builder 中添加一个。
  2. 添加一个额外的View Controller.
  3. Crtl + 鼠标按下Split View Controller并拖动到附加的View Controller.
  4. 选择split items

而已。

于 2018-03-20T22:32:05.757 回答
7

实际上,HTH 启发了我在 Interface Builder 中尝试第三种可能性,结果证明效果很好。特别是,移动一个分隔符不会在其他地方进行任何意外更改,如果您嵌套拆分视图,这很容易发生。

  • 添加一个NSSplitView到你的窗口,
  • 添加一个NSView(IB 中的自定义视图)作为拆分视图的子项。您最终会得到一个包含三个而不是两个子视图的拆分视图。

它在 IB 对象列表中的样子

如果您将另一个添加NSSplitView为孩子,则同样适用,尽管您必须小心嵌套的拆分视图如何相互影响。上图显示了它在界面生成器中的外观,第二张显示了模拟器中的结果。

结果

于 2013-03-19T11:06:46.787 回答
1

我猜你确实解决了这个问题。无论如何,有两种方法。第一个类似于上面的答案,将一个 splitview 拖动到您想要的位置,然后将第二个 splitview 拖动到其中一个容器内( splitview 的子视图)。视图层次结构就像

Window 
Window containerview
        Splitview
            Containerview_left | containerview_right
                                    Splitview
                                        Containerview_left | containerview_right

如果您通过代码,则创建一个拆分视图,将其添加为窗口视图的子视图。然后,通过使用 [splitview addsubview] 添加它们来创建拆分视图子视图,如果添加三个子视图,则有两个分隔符。层次结构不同。

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

这意味着,如果你想找到一个子视图,你必须知道你是如何创建它的。

高温高压

于 2012-08-29T08:47:07.893 回答