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

时间:2016-01-12 17:19:30

标签: objective-c cocoa autolayout nsimageview

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

由于图片尺寸可能比父视图的尺寸大,我想通过使用NSImageScaleProportionallyDown按比例缩小它们。

我的问题似乎是NSImageViews的默认行为,它只会缩小超出自动布局设置的约束的轴,然后将NSImage置于NSImageView的中心位置这会导致NSImageView占据尽可能多的高度,就像它没有按比例缩小一样,并打破垂直流,因为图像之间的空间不同。

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

那么如何使NSImageView占用的空间与按比例缩放的NSImage所需的空间相同?

2 个答案:

答案 0 :(得分:1)

  

那么如何使NSImageView占用的空间与按比例缩放的NSImage所需的空间相同?

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

答案 1 :(得分:0)

我不知道你问题的答案,但是如果你的用例中有可能的话,我想建议一种替代方法。如何在将实际图像放入图像视图之前缩小它们。这样,您还可以节省一些内存,因为图像视图的内容本身会更小。您可以找到我在iOS上缩放图像时提供的示例。我做了一个快速检查,看起来你可以为OSX编写类似的代码。有关示例,请参阅In iOS, how to convert a web image into a less-quality one?