【问题标题】:How to disable resizing of the subview of NSSplitView in Interface Builder?如何在 Interface Builder 中禁用调整 NSSplitView 子视图的大小?
【发布时间】:2010-01-10 22:14:31
【问题描述】:

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

【问题讨论】:

    标签: cocoa interface-builder nssplitview


    【解决方案1】:

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

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

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

    【讨论】:

    • 此方法需要您启用自动布局
    • 当我这样做时,我仍然会在分隔线上方获得调整大小的光标。有没有办法让调整大小的光标不显示?
    • 查看 resetCursorRects 以更改显示的光标。
    • 由于自动布局现在默认开启,这应该是公认的答案。
    【解决方案2】:

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

    【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-28
      • 1970-01-01
      相关资源
      最近更新 更多