【问题标题】:Fixed window width with Auto Layout使用自动布局固定窗口宽度
【发布时间】:2014-02-08 11:42:56
【问题描述】:

我在界面生成器中有一个窗口和一个视图。我已将窗口大小调整为我想要的大小。我希望窗口保持相同的宽度,但调整大小以垂直拥抱内容。我在窗口上设置了最小尺寸。该窗口不是用户可调整大小的。我将视图添加到应用程序委托中的窗口并添加水平和垂直中心位置约束。

我无法阻止窗口水平拥抱内容。即使窗口上的最小尺寸,即使将 contentView 上的水平内容拥抱优先级设置为 1,在窗口上设置框架,似乎也没有任何效果。我错过了什么?

【问题讨论】:

标签: objective-c cocoa autolayout nswindow


【解决方案1】:

不清楚你在这里做什么或它是如何失败的,但我会试一试。

您似乎想向窗口添加视图,并让窗口垂直调整大小以适应内容,但永远不要水平调整大小。好的。

首先,窗口的最小尺寸在这里不起作用。这是之前约束的较旧设置,如果我们使用约束,您将不会在此问题上使用它。

其次,内容拥抱优先级也不会发挥作用。 contentView 不会遍历它的视图并确保它拥抱它们——如果这样做,你将永远无法添加其他更有趣的约束,因为它们会发生冲突。

当你添加你的视图时,你应该设置一个水平中心约束(你现在做的),然后在新视图上设置一个顶部和底部对齐约束(你没有说你这样做),所以它与其父视图的顶部和底部。

这应该就是你所需要的。当您添加子视图时,您似乎表明窗口正在以某种方式调整大小,如果您执行这些步骤并且仅执行这些步骤,则它不应该这样做,因此如果失败,我必须查看代码。


编辑:

您设置了要添加的“视图”,因此它将其自动调整大小掩码(它是隐藏的,因此非常混乱)转换为更多约束,这让您感到困惑。这是旧系统的神器,很烂。

这是我如何在检查器中设置它的照片(该框现在未选中)。我做了一些其他的事情来让它工作,但我认为如果你取消选中这个框,你可以玩它并让它自己工作。如果没有,请再次 ping 我。

(在我的机器上,我为窗口的 contentView 创建了一个子视图,并为子视图添加了宽度约束,因为你不能直接约束 contentView(这很愚蠢)。然后我将你的视图添加到我的约束子视图中,并且将 y 居中线二改为约束顶部和底部的线。一切都很好。)

【讨论】:

  • 感谢您的回复。我确实需要为垂直添加顶部和底部约束,但这不是我主要关心的问题。问题是窗口正在水平调整大小以适应视图。即使使用 setFrame: 也不会改变。我不知道为什么,我只是添加了中心对齐约束。
  • 复制非常简单,只需添加中心约束即可。见mega.co.nz/…
  • 中心约束仅定位您的视图。你需要一些能赋予它大小的东西。
  • 谢谢,这就是解决方案。我制作的示例项目使用所有 Xcode 默认值,我没有切换该复选框。真烦人!
猜你喜欢
  • 1970-01-01
  • 2017-01-23
  • 1970-01-01
  • 2014-12-22
  • 1970-01-01
  • 1970-01-01
  • 2012-01-23
  • 2012-12-31
  • 2014-03-23
相关资源
最近更新 更多