菜鸟造轮子:iOS的Autolayout+Xib(一)

2019-05-28  本文已影响0人  菜鸟吃咸鱼

引言

WWDC 2018:高性能 Auto Layout,苹果公司演示了其高性能的线性布局方式,其实在iOS6上就有这种布局概念当时名字叫做Autoresizing,这个技术并不怎么完美,不足还是很多,大约在iOS8时代(没记错的话)才有真正的“约束”Autolayout。
 就像说“PHP是世界上最好的语言”“中医是伪科学”一样,当你对其他iOSer说Autolayout贼好用,最大可能就是收获“原生Frame党”的鄙视,以及“Masonry党”这种中间型叛徒会对两边都进行吐槽,那么Autolayout到底在性能上表现如何?这里有一篇非常不错的文章
介绍了Autolayout,可以稍作了解,我主要是为大家介绍如何用这样一个偷懒技术

第一节:布局

 请恕我才疏学浅,只用过iOS的布局方式,我下面说的也基本上就只是我了解的iOS的布局方式。
 对于iOS来说布局基本上都是在UIView上,可以理解为画布,一般来说它经常是矩形,这块画布有两个坐标系:

1. 以其父视图为参照物其坐标属性就为Frame:
Frame
可看出其父视图圆点在左上,从(0,0)开始,一般我们在坐标系中想确定一个点的位置只需要知道这个点在该坐标系中的(x,y)就可以确定;而却定一个矩形的位置,我们可以以其自身原点与其父视图原点(即父视图坐标系位置)的相对坐标确定这个原点位置,再加上矩形的(width,height),这个矩形就可以完整的显示在父视图上了。 Frame定位

对应到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中都在哪里?


属性1
属性2
属性3
对应属性3在xcode中的位置
上一篇下一篇

猜你喜欢

热点阅读