在求职面试中有人问我这个问题,我想知道他的意思。
对于具有固有内容大小的任何视图,拥抱和压缩属性的作用是显而易见的。
但是没有固有内容大小的视图又如何呢?他们在那里发挥作用吗?
答案 0 :(得分:1)
奇怪的问题,没有其他上下文。
但是,我想您可以讨论几件事...
某些视图 get 事后固有的内容大小。例如,UIImageView
...没有图像,则没有固有内容大小。但是,一旦设置了其.image
属性,其固有内容大小即为图像的大小。因此,您可能希望根据发生的事件设置优先级。
您可以提供UIView
,例如“占位符”固有内容大小。更改拥抱/压缩优先级 会在设计时影响该视图。
在这两种情况下,您都将在Storyboard / IB设计期间针对运行时的需求进行“预先计划”。
编辑
这是一个(相当长的)示例:
在这里,我有一个UIView
(绿色),其中包含一个UIStackView
设置为Fill / Fill / 8
。堆栈视图包含一个UIImageView
(Scale To Fill
)和一个UILabel
。图像视图具有否内部内容大小,而标签具有基于其内容的内部内容大小。
根据我设置的约束,堆栈视图为200 x 240
点。
在运行时,我将图像设置为猫的200 x 100
png:
我的目标是使图像视图“适合图像”,使标签垂直扩展。
当我通过代码(在运行时)设置.image
时,图像视图“获取”固有的内容大小(在这种情况下为200 x 100
)。在图像视图和标签都带有Vertical Content Hugging: 251
(默认值)的情况下,结果如下:
但是我希望图像保留其原始纵横比2:1
。首先想到的是将图像视图的“内容模式”更改为Aspect Fit
,但我得到了以下结果:
现在,我的图像视图是将图像“装箱”,显示红色背景颜色。
因此,我更改了图像视图的Vertical Content Hugging: 252
(优先级高于标签)。输出:
现在,我有了所需的运行时输出,但是在设计时(在Storyboard / IB中工作),没有任何变化,并且可能还不太清楚会发生什么。
因此,我给图像视图一个 占位符 的内在内容大小为200 x 100
,我看到了:
因为它是一个占位符,所以对运行时输出没有影响(如果我将图像设置为200 x 50
图像,则它将在运行时为200 x 50
-时间),但它可以更好地反映我的期望。
当然,还有其他方法可以实现目标,但这可能不是理想的方法,但是(希望)提供了一种在元素上设置拥抱/压缩优先级的方法没有内在内容的大小可能是有用/需要的。