UIImageView 不会随图像调整大小

UIImageView won't resize with image

这个快把我逼疯了。我有一个 UIImageView 约束 'width <= 34'。当我将图像设置为 nil 时,我希望视图的宽度缩小为零,但它不会。

我已经对所有内容进行了两次和三次检查...没有其他应该干扰的限制等。事实上,我有另一个 table 视图单元格,它可以完美地工作。

我错过了什么?

编辑:以下是此视图的所有约束。

没有固有内容大小的视图的高度宽度不等会导致布局不明确。 (确切地说,对于 return UIViewNoIntrinsicMetric 作为固有内容大小的高度和宽度的视图)

让我们明白这一点。在下图中,一切看起来都是正确的。

现在,当图像设置为 nil 时,自动布局会提醒我们有歧义。 为什么?因为没有图像,returned 固有高度和宽度是 UIViewNoIntrinsicMetric,然后像 "height <= 37" 这样的不等式单独不能帮助自动布局引擎找到视图的 height/width。

现在,当我们设置显式内在内容大小(虽然不适用于运行时)时,歧义就解决了。

因此,为了解决您的问题,我们需要 return 0,0 作为固有内容大小。 您应该尝试子类化 UIImageView 来覆盖 -intrinsicContentSize.

@implementation ZeroedIntrinsicContentSizeImageView

- (CGSize)intrinsicContentSize {
    if (self.image)
        return [super intrinsicContentSize];
    return CGSizeZero;
}

@end