为啥添加约束会消除调整 NSWindow 大小的能力?
Posted
技术标签:
【中文标题】为啥添加约束会消除调整 NSWindow 大小的能力?【英文标题】:Why adding constraints removes the ability to resize NSWindow?为什么添加约束会消除调整 NSWindow 大小的能力? 【发布时间】:2016-08-18 08:10:26 【问题描述】:我正在尝试的只是添加一个 NSImageView 并在我调整其大小时使其填充窗口。
但是,一旦添加了约束,窗口就会失去调整大小的能力。
如果我添加
view.translatesAutoresizingMaskIntoConstraints = false
约束也被忽略了。
谁能指出我做错了什么?
代码可以从here下载
【问题讨论】:
【参考方案1】:首先,您的parentView
是窗口的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 中重做整个事情来回答这个问题。每当我选择图像视图时,就会出现橙色虚线警告线,这一问题是压缩约束问题的事实立即显而易见:
【讨论】:
以上是关于为啥添加约束会消除调整 NSWindow 大小的能力?的主要内容,如果未能解决你的问题,请参考以下文章
NSLayoutConstraint 防止 NSWindow 调整大小