引言
WWDC 2018:高性能 Auto Layout,苹果公司演示了其高性能的线性布局方式,其实在iOS6上就有这种布局概念当时名字叫做Autoresizing,这个技术并不怎么完美,不足还是很多,大约在iOS8时代(没记错的话)才有真正的“约束”Autolayout。
就像说“PHP是世界上最好的语言”“中医是伪科学”一样,当你对其他iOSer说Autolayout贼好用,最大可能就是收获“原生Frame党”的鄙视,以及“Masonry党”这种中间型叛徒会对两边都进行吐槽,那么Autolayout到底在性能上表现如何?这里有一篇非常不错的文章
介绍了Autolayout,可以稍作了解,我主要是为大家介绍如何用这样一个偷懒技术。
第一节:布局
请恕我才疏学浅,只用过iOS的布局方式,我下面说的也基本上就只是我了解的iOS的布局方式。
对于iOS来说布局基本上都是在UIView
上,可以理解为画布
,一般来说它经常是矩形,这块画布有两个坐标系:
1. 以其父视图为参照物其坐标属性就为Frame:
可看出其父视图圆点在左上,从(0,0)开始,一般我们在坐标系中想确定一个点的位置只需要知道这个点在该坐标系中的
(x,y)
就可以确定;而却定一个矩形的位置,我们可以以其自身原点
与其父视图原点(即父视图坐标系位置)
的相对坐标确定这个原点位置,再加上矩形的(width,height)
,这个矩形就可以完整的显示在父视图上了。
对应到iOS当中代码为:
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(20, 60, 120, 200)];
[self.view addSubview:view];
好了你要是理解了如何去定位一个视图,那么Autolayout对于你来说就是手到擒来,接下我介绍一下xib中Autolayout都有哪些属性:
2. Autolayout属性(对比Masonry)
Autolayout其实就是约束对象,它在UIKit
中类对象为NSLayoutConstraint
约束名 | xib中约束名 | Masonry中的名 | 解释 |
---|---|---|---|
NSLayoutAttributeLeft | Leading | left | 该视图相对参照约束视图左边约束 |
NSLayoutAttributeRight | Trailing | right | 该视图相对参照约束视图右边边约束 |
NSLayoutAttributeTop | Top | top | 该视图相对参照约束视图上边约束 |
NSLayoutAttributeBottom | Bottom | bottom | 该视图相对参照约束视图下边约束 |
NSLayoutAttributeLeading | Leading | leading | 该视图相对参照约束视图左边约束 |
NSLayoutAttributeTrailing | Trailing | trailing | 该视图相对参照约束视图右边边约束 |
NSLayoutAttributeWidth | Width | width | 该视图宽度约束 |
NSLayoutAttributeHeight | Height | height | 该视图高度度约束 |
NSLayoutAttributeCenterX | Horizontally | centerX | 中心点横坐标(x)与约束对象中心点横坐标(x)关系 |
NSLayoutAttributeCenterY | Vertically | centerY | 中心点纵坐标(y)与约束对象中心点纵坐标(y)关系 |
NSLayoutAttributeLastBaseline | Last Baseline | lastBaseline | 针对于文字,字体多段落最后一段落底部对齐 |
NSLayoutAttributeFirstBaseline | First Baseline | firstBaseline | 针对于文字,字体多段落以第一段落底部对齐 |
NSLayoutAttributeLeftMargin | Constrain to margin | leftMargin | 该视图对于约束视图的左边约束并有一定偏移量 |
NSLayoutAttributeRightMargin | Constrain to margin | rightMargin | 该视图对于约束视图的右边约束并有一定偏移量 |
NSLayoutAttributeTopMargin | Constrain to margin | topMargin | 该视图对于约束视图的上边约束并有一定偏移量 |
NSLayoutAttributeBottomMargin | Constrain to margin | bottomMargin | 该视图对于约束视图的下边约束并有一定偏移量 |
NSLayoutAttributeLeadingMargin | Constrain to margin | leadingMargin | 该视图对于约束视图的左边约束并有一定偏移量 |
NSLayoutAttributeTrailingMargin | Constrain to margin | trailingMargin | 该视图对于约束视图的右边约束并有一定偏移量 |
NSLACenterXWithinMargins(简写了) | 同上 | centerXWithinMargins | 中心点(x)与约束对象中心点(x)关系并有一定偏移量 |
NSLACenterYWithinMargins(简写了) | 同上 | centerYWithinMargins | 中心点(y)与约束对象中心点(y)关系并有一定偏移量 |
那么这些属性在xib中都在哪里?