0

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

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

我错过了什么?

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

在此处输入图像描述在此处输入图像描述

4

1 回答 1

1

没有内在内容大小的视图的高度宽度不等式会创建模棱两可的布局。 (确切地说,对于UIViewNoIntrinsicMetric以固有内容大小返回高度和宽度的视图)

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

在此处输入图像描述

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

没有内容图像的 UIIMageView,关于不明确的布局的警报

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

使用固有大小占位符设置时相同的 UIImageView 可解决歧义

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

@implementation ZeroedIntrinsicContentSizeImageView

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

@end
于 2015-05-19T12:01:48.003 回答