如何使用自动布局按比例缩小 NSImageView?

How to scale down NSImageView proportionally using auto layout?

我有多个 NSImageView 不同尺寸和比例的垂直堆叠在水平有限的视图中 space。

由于图像尺寸可能大于父视图的尺寸,我想使用 NSImageScaleProportionallyDown.

按比例缩小它们

我的问题似乎是 NSImageViews 的默认行为,它只按比例缩小超出自动布局设置的约束的轴,然后将 NSImage 居中 [=10] =],这会导致 NSImageView 占用尽可能多的高度,就好像它根本没有按比例缩小一样,并且由于图像之间的 space 不同而破坏了垂直流。

我尝试设置 [questionImage setContentHuggingPriority:NSLayoutPriorityRequired forOrientation:NSLayoutConstraintOrientationHorizontal]; 但没有成功。

那么如何让 NSImageView 只占用 space 按比例缩放的 NSImage 所需的空间?

我不知道您问题的答案,但如果在您的用例中可能的话,我想建议一种替代方法。在将真实图像放入图像视图之前缩小它们怎么样?这样你也可以节省一些内存,因为图像视图的内容本身会更小。您可以在 iOS 上找到我提供的用于缩放图像的示例。我快速检查了一下,您似乎可以为 OSX 编写类似的代码。有关示例,请参阅

So how do you make the NSImageView only take up as much space as the proportionally scaled NSImage requires?

您需要知道图像的纵横比,并根据其高度约束设置 NSImageView 的宽度约束 multiplier(反之亦然),以强制执行相同的纵横比。换句话说,如果图像视图的宽度由外部约束决定,那么它的高度需要(通过它的multiplier)由它的结果宽度决定,反之亦然。