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

问题描述 投票:5回答:3

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

cocoa interface-builder nssplitview
3个回答
2
投票

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


5
投票

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

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

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


0
投票

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

编辑:

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

第二种方法是在代码中创建一个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下找到该主题的文档。要使用它,您必须启用自动布局,并且此特征替换旧的自动调整功能。 (因此我在代码中禁用自动调整掩码)。

这个功能是新的,你可以用它做复杂的东西,但我认为我值得研究。

© www.soinside.com 2019 - 2024. All rights reserved.