没有图像的自动布局 UIImageView
Posted
技术标签:
【中文标题】没有图像的自动布局 UIImageView【英文标题】:Autolayout UIImageView without image 【发布时间】:2014-03-07 14:15:49 【问题描述】:我有一个 UIImageView,带有缩放中心,所以它的大小会根据里面的 UIImage 而变化,但是,通过设置 nil UIImage,约束会中断,因为无法计算内容大小
如何处理 nil UIImage 的自动布局(大小应改为 0,0)?
【问题讨论】:
【参考方案1】:问题是UIImageView
在没有设置图像时返回 -1, -1 作为 intrinsicContentSize。使用UIImageView
的子类,实现如下:
@implementation MyImageView
- (CGSize)intrinsicContentSize
if (self.image)
return [super intrinsicContentSize];
return CGSizeZero;
@end
【讨论】:
非常有帮助,谢谢。一个小补充:您可能还想检查图像的大小是否为零,在这种情况下,还返回CGSizeZero
,默认为 -1, -1。【参考方案2】:
@nikita-ivaniushchenko's answer 让我想到了将Low (250)
优先级等于0
的Width
约束添加到UIImageView
,因此当UIImage
设置为nil
时应用它。
注意:我只添加了
Width
约束,因为在我的情况下UIImageView
的宽度存在问题。不过,两者都应该适用。
【讨论】:
为什么它应该起作用?我今晚会尝试,但我很好奇答案背后的原因 我不确定,但是,我怀疑intrinsicContentSize
只是一些内部约束,为方便我们自动创建。当我们添加高度/宽度约束时,intrinsicContentSize
的约束要么被删除,要么具有较低的优先级。
@yitschak 值得注意的是,我的假设基于this answer
它对我有用,只是不是 250 而是 500(或 750)。不知道为什么。
它也适用于宽度 = 0,优先级 > 250 的我。我猜 intrinsicContentSize
的优先级最低,将优先级设置为 250(最低)让 intrinsicContentSize
接管。因此,将优先级设置为 > 250 只会有所帮助。顺便说一句,感谢您提供这个很棒的提示!【参考方案3】:
将Content hugging priority
设置为Required
(1000)。
更新:此答案以前有效,但现在无效。 改用 Nikita Ivaniushchenko 回答。
【讨论】:
刚刚在 ios 8 上再次检查。当UIImageView
设置了 nil
图像时,它不会将其大小更改为 0,0。考虑你有这样的东西:|-[imageView]-[label]-|
当没有图像集时,UIImageView
大小将扩展到最大可用空间,无论你为Content hugging priority
设置什么值。这是因为当UIImageView
中没有设置图像时,其intrinsicContentSize
默认为-1,-1。 @Nikita Ivaniushchenko 的答案是正确的解决方案。
@Darrarski 我创建了测试项目,我应该说你是对的——目前它不起作用。我不知道为什么 Apple 最近改变了这种行为。以上是关于没有图像的自动布局 UIImageView的主要内容,如果未能解决你的问题,请参考以下文章
UIImageView 高度不是自动布局约束后子图像高度的高度。