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

发布于 2024-08-17 13:33:01 字数 188 浏览 7 评论 0原文

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

I've created in Interface Builder a NSSplitView with two subviews. I want the left-side view to have fixed width. I've tried to define autosizing rules for both subviews but the left subview still changes width on window resizing (split view fills up a window). May be that caused by NSSplitView's Autoresizes Subviews property? (I can't uncheck it). What can I do?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

始终不够爱げ你 2024-08-24 13:33:01

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

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

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

The best way I found to do this in Interface Builder:

  • Drop the NSSplitView on the window
  • Select the Custom View you want fixed
  • Go up to the Xcode menu and select Editor > Pin > Width
  • Adjust the Constant in the Attributes Inspector to the size that you want the panel to be fixed at

Of course, you can also add this layout constraint through code as suggested above if you're feeling adventurous.

扛刀软妹 2024-08-24 13:33:01

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

The behavior that you want required some code that you can do on the NSSplitView's delegate. However, you can have the same result using BWToolKit.

寄居者 2024-08-24 13:33:01

我认为它应该与 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]];

一般来说,您可以在术语 自动布局。要使用它,您必须启用自动布局,并且此功能将取代旧的自动调整大小功能。 (因此我在代码中禁用自动调整大小蒙版)。

这个功能很新,你可以用它做复杂的事情,但我认为我值得学习。

I think it should work with a NSLayoutConstraint, I work at the moment on at :).

EDIT:

Maybe to provide more details on my answer based on the comment hayden. You can define a constraint either by code or in the the IB.
In the IB select your left subview and click on the constraint buttons in the lower right corner defining a width constraints. If you select this new constraint now you can setup the the width an say it should be equal and set the size you like.

The seconed way is to create in code a NSLayoutConstraint object, i do it like this (this is just an example, and define not a fix width).

// 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]];

In general you find documentation to this topic under the term Auto Layout. To use it you have to enable auto layout and this featuer replace the old autosizing functions. (therefore i disable autosizing mask in the code).

This feature is quit new and you can do complex stuff with it but i think I is worth to study.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文