2015-05-16 245 views
0

这是一个让我疯狂。我有一个UIImageView约束'宽度< = 34'。当我将图像设置为nil时,我期望视图的宽度缩小到零,但不会。UIImageView不会调整大小与图像

我已经双重和三重检查了一切...没有其他约束,应该干扰,等等。其实,我有另一个表视图单元格,这完美的作品。

我错过了什么?

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

enter image description hereenter image description here

+1

什么是影响此视图的约束条件? – matt

回答

1

高宽为视图不等式不含固有内容大小创建暧昧布局。 (准确地说,对于在内容大小中将UIViewNoIntrinsicMetric作为高度和宽度返回的视图)

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

enter image description here

,当图像被设为零,自动布局提醒我们歧义。 为什么?因为没有图像,返回的固有高度和宽度为UIViewNoIntrinsicMetric,然后像“高度< = 37”这样的不平等无法帮助自动布局引擎查找视图的高度/宽度。

A UIIMageView with no content image, alerts about ambiguous layout

现在,当我们设置明确的固有内容大小(不适用于运行虽然),模糊性得到解决。

Same UIImageView when set with intrinsic size placeholder resolves ambiguity

所以,解决您的问题,我们需要回到0,0的内在含量的大小。 你应该尝试继承UIImageView,覆盖-intrinsicContentSize

@implementation ZeroedIntrinsicContentSizeImageView 

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

@end 
+0

感谢您的详细解答。然而,实现intrinsicContentSize和返回(2.0,2.0)我注意到,必须有一个额外的问题,因为图像现在将缩小高度,但不是在宽度。所以我开始怀疑现在的UIImageView的行为如预期的那样,但是相邻的UITextView在它应该时不会扩展。我会报告并在经过一些更广泛的测试后接受您的答案。 – Lukas

+0

仍在挣扎?这里是一个示例 – BangOperator

+0

https://github.com/hudinwal/StackAnswer – BangOperator