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

5

我已经在Interface Builder中创建了一个包含两个子视图的NSSplitView。我希望左侧视图具有固定的宽度。我已经尝试为两个子视图定义自动调整大小规则,但左侧子视图仍会在窗口调整大小时改变宽度(分割视图填充窗口)。这可能是由于NSSplitView的“Autoresizes Subviews”属性引起的?(我无法取消选中它)。我该怎么办?

3个回答

5
我在Interface Builder中发现了最好的方法:
  • 将NSSplitView放置在窗口上
  • 选择您想要固定的自定义视图
  • 转到Xcode菜单,选择Editor > Pin > Width
  • 在属性检查器中调整常数,以使面板的大小固定为所需大小
当然,如果你想冒险的话,你也可以像上面建议的那样通过代码来添加这个布局约束。

1
这种方法需要启用自动布局。 - Besi
2
当我这样做时,当鼠标移到分隔符上时仍然会出现调整大小的光标。有没有办法使调整大小的光标不显示? - Ken Aspeslagh
请查看 resetCursorRects 以更改显示哪个光标。 - Chris Livdahl
由于自动布局现在默认开启,因此这应该是被接受的答案。 - John Scalo

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


谢谢 - 这很有帮助 :) 或许有人会对关于NSSplitView代理的Cocoa With Love文章感兴趣:http://cocoawithlove.com/2009/09/nssplitview-delegate-for-priority-based.html - dzolanta

0

我认为可以使用NSLayoutConstraint,我目前正在进行中 :)

编辑:

也许根据hayden的评论提供更多细节来解释我的答案。您可以通过代码或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]];

一般来说,您可以在术语自动布局下找到有关此主题的文档。要使用它,您必须启用自动布局,该功能将替换旧的自动调整大小功能(因此我在代码中禁用了自动调整大小掩码)。
这个功能相当新,您可以使用它完成复杂的任务,但我认为值得学习。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接