UIImageView不会调整图像大小

时间:2015-05-16 11:47:54

标签: cocoa autolayout ios8.3

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

我已经对所有内容进行了双重和三重检查......没有其他任何应该干扰的约束,等等。实际上,我有另一个表视图单元格可以完美地工作。

我错过了什么?

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

enter image description here enter image description here

1 个答案:

答案 0 :(得分:1)

没有内在内容大小的视图的高度宽度不等式会产生不明确的布局。 (确切地说,对于返回UIViewNoIntrinsicMetric作为内在内容大小的高度和宽度的视图)

让我们理解这一点。在下图中,每件事情看起来都是正确的。

enter image description here

现在,当图像设置为nil时,自动布局会提醒我们模糊性。 为什么?因为没有图像,返回的内在高度和宽度为UIViewNoIntrinsicMetric,然后单独使用“height< = 37”之类的不等式无法帮助自动布局引擎找到视图的高度/宽度。

A UIIMageView with no content image, alerts about ambiguous layout

现在,当我们设置明确的内在内容大小时(虽然不适用于运行时),但是歧义已经解决。

Same UIImageView when set with intrinsic size placeholder resolves ambiguity

因此,要解决您的问题,我们需要返回0,0作为内在内容大小。 您应该尝试子类化覆盖-intrinsicContentSize的UIImageView。

@implementation ZeroedIntrinsicContentSizeImageView

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

@end