如何以最小和最小的方式实现3窗格N​​SSplitView最大尺寸?

时间:2012-07-30 23:00:14

标签: cocoa nssplitview

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

我想要的布局如下:

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

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

  • 窗格1:最低140pt。最高:400pt。
  • 第2窗格:最低250pt。
  • 窗格3:最低400pt。

任何指针都会非常感激。

4 个答案:

答案 0 :(得分:8)

要强制实施最小尺寸,请查看我们创建的BESplitViewConstraintEnforcer实用程序类。

顺便说一句:如果您想避免嵌套拆分视图,而是在Interface Builder中添加一个额外的窗格,请将新视图拖动到拆分视图对象中,如下面的屏幕截图所示。

Screenshot

答案 1 :(得分:6)

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

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

What it looks like in the IB Objects List

如果您在孩子时添加另一个NSSplitView,同样有效,尽管您必须小心嵌套分割视图如何相互影响。上图显示了它在界面构建器中的外观,第二个显示模拟器中的结果。

The result

答案 2 :(得分:4)

在Xcode 8.2.1

中非常简单
  1. 只需在Interface Builder中添加Split View Controller
  2. 添加其他View Controller
  3. Crtl +鼠标按下Split View Controller并拖动到其他View Controller
  4. 选择split items
  5. 就是这样。

答案 3 :(得分:0)

我猜你确实解决了这个问题。 无论如何,有两种方式。 第一个就像上面的答案一样,将splitview拖动到你想要的位置,然后在其中一个容器(splitview的子视图)中拖动第二个splitview。 视图hierarchie就像

Window 
Window containerview
        Splitview
            Containerview_left | containerview_right
                                    Splitview
                                        Containerview_left | containerview_right

如果你是通过代码,那么你创建一个splitview,将它添加为窗口的子视图,视图。 然后使用[splitview addsubview]添加它们来创建splitview子视图 如果你添加三个子视图,你有两个deviders。 hierarchie是不同的。

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

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

HTH

相关问题