为什么添加约束会移除调整 NSWindow 大小的能力?

Why adding constraints removes the ability to resize NSWindow?

我正在尝试的是,添加一个 NSImageView 并在我调整它的大小时使其填充 Window。

但是,一旦添加了约束,window 就失去了调整大小的能力。

如果我加上

view.translatesAutoresizingMaskIntoConstraints  = false

约束也被忽略了。

有人可以指出我哪里做错了吗?

代码可以从here

下载

首先,您的 parentView 是 window 的 contentView。我想不出有什么时候我曾经干扰过此视图的默认布局行为,所以我会删除行 parentView.translatesAutoresizingMaskIntoContraints = false

其次,从你的事情的外观来看,你想对约束图像视图负全部责任,所以对于这个视图你应该translatesAutoresizingMaskIntoContraints 设置为 false。

最后,除了您添加的约束之外,all NSView objects come with constraints that tell Auto Layout to what extent the view's content should effect how and whether it resizes。内容的含义因视图而异,但在您的情况下是 NSImage 对象。在你的代码中,你得到了默认行为,基本上说不允许任何内容压缩 - 你需要改变这个:

imageView.setContentCompressionResistancePriority(249, forOrientation: NSLayoutConstraintOrientation.Horizontal)
imageView.setContentCompressionResistancePriority(249, forOrientation: NSLayoutConstraintOrientation.Vertical) 

真的,除非您有令人信服的理由不这样做,否则您应该在 Interface Builder 中设置 NSImageView。 Interface Builder 不仅消除了行和行代码,还提供实时调试帮助。例如,我通过注释掉所有代码并首先在 Interface Builder 中重做整个事情来回答这个问题。从我选择图像视图时出现的橙色虚线警告线可以看出,问题是压缩约束问题: