在文章开始先放上几个链接,是我当时为了弄清楚AutoLayout看过的比较有帮助的文章:
http://www.cocoachina.com/ios/20141011/9871.html
http://www.cocoachina.com/ios/20150421/11632.html
https://www.natashatherobot.com/ios-autolayout-scrollview/
Equality, Not Assignment
“是相等,不是赋值” ---- 理解这个非常重要,因为赋值是将等式右边的结果赋给左边的变量,而相等是让等式的两边结果相等,确实很难用表达式表达这样一种关系,但在Apple文档用了=,如果只是看等式很难知道这其中的奥妙,最关键是看Apple的文档对这个的解释,即使换做是 == 也很难说明其内在的逻辑关系,==是逻辑判断,其结果是真或者假,在APPLE 的文档大概的表达的意思是,依据一组相互作用的约束,使每个约束的关系(关系包括三种:等于、大于等于和小于等于)两边的运算结果满足这种关系。
prototype constraints
当我们把一个视图拖到场景中时,设计起会默认帮我们建立若干预先定义的prototype constrains 约束,这种约束是不可见也不能编辑的。当我们添加一个约束的时候,这种prototype约束就会自动去除,所以我们要完成所有约束让这个视图的自动布局能正确工作。
为什么是Leading和Trailing,而不是left 和 right?
其实left 和 right 都有,但是考虑到阅读方向的问题,leading 和 Trailing 就很容易理解了,大部分地区和国家的阅读习惯都是从左到右,可在某些地区仍然保留有从右向左阅读的习惯,那么Leading和Trailing表示头和尾就很容易理解,而且会随着阅读方向的调整而自动调整,而left 和 right 确实绝对值,左边就是左边,右边就是右边。所以使用leading 和 Trailing可以自适应。
Intrinsic Content Size, Compression Resistance 和 Content Hugging
Instrinsci Content Size 内在的内容尺寸, 这个可以参考一下按钮控件, 按钮控件中间包裹文字的区域的大小就是Intrinsic Content Size, Compression Resistance 按照翻译就是抗压性,而Content Hugging就是抗拉性,可以想象内容空间由两股力量作用的结果,一个力量是要撑开空间(Compression Resistance),另外一个力量是拉住不让向外扩张(Content Hugging),当两个力量共同作用在一个方向上时候,其结果决定了在这个方向上的大小。默认情况下,抗拉性的优先级别为250(可理解为权重),而抗压性的优先级为750,所以更倾向于让内容空间更大。