Marc StevenCoder
Jul 30, 2017 · 4 min read

它是什么?

一些视图有content但是真的没有任何推荐的尺寸。例如像带一个背景色的UIView,这个颜色并不在乎或者关心它的尺寸是多大

屏幕快照 2017-07-30 下午1.42.30

但是一些content有一个推荐的size。
如果你呈现一个图像120 pix的,它能被放大或缩减到其他大小,但是它有一个本身的大小(120 * 120),这对于图像而言十分明显,但是对于一些类型的conten而言,也尤为重要

屏幕快照 2017-07-30 下午1.44.56
例如你有一个label带有文本(有字体大小),但是label有本身的大小将去呈现所有的它的content
##Hugging and Compression 拥抱和压缩
说简单点,就是离我近一些,离我远一点的意思。
如果自动布局系统正在尝试标定一个视图的大小与它的content的本身大小不同。
这里有二种概念要演示
Content hugging 和compression resistance

content Hugging

不想grow
![屏幕快照 2017-07-30 下午1.56.31](media/15013931396879/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202017-07-30%20%E4%B8%8B%E5%8D%881.56.31.png)

content Hugging定义了期望一个视图不再比它的本身size更大
考虑content hugging ,视图的边缘不想让其走。

原则:

1,宽度小于或者等于本身的宽度
2,高度小于或者等于本身的高度

content Compression Resistance:不想压缩

它定义了期望视图不比它本身 的size小

屏幕快照 2017-07-30 下午2.03.10


有本身大小的每个视图有四个属性在它上面定义。

原则

1,宽度大于或者等于本身的宽度
2,高度大于或者等于本身的高度
3,在垂直方向,相同的申请对于高度,创建了第三个和第四个原则

优先级

现在举个例子,如果你有100pix宽度可用,并且二个label使用本身的size去边靠边,总共大于100pixels,你将不能以它们本身的size去完全显示它们。

屏幕快照 2017-07-30 下午2.13.02

这个时候,就需要考虑优先级了。在这个例子中,我们需要使用的是水平compression 阻尼优先级去决定那个label一个减小它的宽度。

这是仅有的本身content size的部分约束(你所能控制的)你能设置水平方向或者垂直方向的compression resistance 还有content hugging 约束。
### 本身content size
size去匹配你的content
如果我没有使用text,但是使用的是一个图片
本身contentsize对于button是比较后则那个药的,因为当你tap在那个button上的时候,button的size也将决定这个hit对象的大小,因此这或许是事情*本身content 的size是太小)你想hit 目标被更大。Button真的应该有一个最小值(在44 * 44 的高度内)因此,如果你的Button内的文字,你明白的,你仅仅匹配它以30points,然后为了制造一个合适的hit target你或许需要指定button的大小比它本身的content size更大。
对于label而言,默认的背景色是clear,因此很多时候它真的不用关心很多,或者你不能真正地告诉一个label是否被指定大小比它的本身的content大小更大,除了文本被展示的地方外。因此它起初这个标签被指定大小后是不明显的(和屏幕宽度一致),或者如果你有文本居中,它足够大。当然你有一个背景色,很多时候你可以采用这个特性来观察label边到边之间。
Marc StevenCoder

Written by

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade