【问题标题】:Auto layout NSWindow respects minimum size in IB simulator, but not when running for real自动布局 NSWindow 遵守 IB 模拟器中的最小尺寸,但在实际运行时不遵守
【发布时间】:2014-03-20 01:11:07
【问题描述】:

我有一个正在设置自动布局的窗口。窗口中间有一个包含三个控件的视图,我希望窗口拒绝水平调整小于这三个控件的固有大小。

外部按钮都具有水平空间约束以将它们“粘贴”到其父视图的外部,中间的复选框具有水平空间约束将其粘贴到“同步文本”按钮的左侧。 “同步大纲”按钮和复选框之间还有一个 >= 约束,以确保它们不会重叠,但复选框更喜欢挂在右侧。所有这些约束的优先级都是 1000。窗口本身没有指定最小大小。

当我在 Xcode 中使用“模拟文档”命令时,一切都按我的预期进行,并且窗口不会让您将其缩小到比上面的屏幕截图更小。但是,当我运行我的应用程序时,窗口确实允许调整小于该宽度的大小,因此按钮开始缩小,最终控件相互重叠。我没有实现任何与大小相关的窗口委托方法,因此我在应用程序代码中看不到任何可能影响调整大小的地方。

关于什么可能导致这种行为差异的任何想法?

【问题讨论】:

    标签: macos interface-builder autolayout nswindow


    【解决方案1】:

    好的,我终于弄清楚这里到底发生了什么。事实证明,问题在于我正在实现 -splitView:constraintMinCoordinate:ofSubviewAt: 委托方法(以及 maxCoordinate 方法)来限制垂直方向上拆分子视图的大小。是的,限制拆分视图的垂直调整大小会影响按钮的水平布局。

    似乎发生的情况是,如果您实现这些委托方法,NSSplitView 会恢复为使用自动调整大小掩码来布局子视图,而不是自动布局约束。由于包含这些按钮的视图不再参与自动布局,因此当您将窗口大小调整为较小时,这些按钮会混合在一起。在模拟器中,拆分视图没有委托集,因此所有自动布局的东西在那个环境中都可以正常工作。请注意,仅实现方法就足以触发此操作,即使它们只是返回未更改的建议坐标。

    解决方案最终很简单,就是删除委托方法,并用子视图上的垂直约束替换它以限制其大小。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-23
      • 1970-01-01
      相关资源
      最近更新 更多