如何在Interface Builder中禁用NSSplitView子视图的大小调整?

时间:2010-01-10 22:14:31

标签: cocoa interface-builder nssplitview

我在Interface Builder中创建了一个带有两个子视图的NSSplitView。我希望左侧视图具有固定宽度。我试图为两个子视图定义自动调整规则,但左侧子视图仍然在窗口大小调整时更改宽度(拆分视图填满窗口)。可能是由NSSplitView的Autoresizes Subviews属性引起的? (我无法取消选中)。我该怎么办?

3 个答案:

答案 0 :(得分:5)

我发现在Interface Builder中执行此操作的最佳方式:

  • 在窗口中删除NSSplitView
  • 选择要修复的自定义视图
  • 转到Xcode菜单并选择Editor> Pin>宽度
  • 将“属性”检查器中的“常量”调整为希望将面板固定为
  • 的大小

当然,如果您喜欢冒险,也可以通过上面建议的代码添加此布局约束。

答案 1 :(得分:2)

您需要的行为需要一些可以在NSSplitView的委托上执行的代码。但是,您可以使用BWToolKit获得相同的结果。

答案 2 :(得分:0)

我认为它应该适用于NSLayoutConstraint,我现在正在工作:)。

编辑:

根据评论hayden提供更多有关答案的详细信息。您可以通过代码或IB来定义约束。 在IB中选择左侧子视图,然后单击右下角定义宽度约束的约束按钮。如果你现在选择这个新约束,你可以设置宽度,说它应该相等,并设置你喜欢的大小。

seconed的方法是在代码中创建一个NSLayoutConstraint对象,我这样做(这只是一个例子,并且不定义固定宽度)。

// define for the view: Constraint and AutoresizingMask option
NSView *view = self.view;
[view setTranslatesAutoresizingMaskIntoConstraints:NO];  // disable AutoresizingMask
NSDictionary *views = NSDictionaryOfVariableBindings(view);
[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"[view(>=140,<=220)]" options:0 metrics:nil views:views]];

通常,您会在术语Auto Layout下找到此主题的文档。要使用它,您必须启用自动布局,并且此特征替换旧的自动调整功能。 (因此我在代码中禁用自动调整掩码)。

此功能已退出新功能,您可以使用它执行复杂的操作,但我认为我值得学习。