i4-320*480 ———– 计算Frame
iPad-768*1024 ——–Autoresizing — 让控件随父控件拉伸而拉伸 (不能同级别间控件)
i5-320*568 ————Autolayout —— 可以约束各个控件间位置(不能用于不同屏幕)
i6-375*667——————SizeClass—–根据不同设备不同约束(autoLayout).
i6s-414*736
一、固定一个控件的步骤:
1.先确定固定哪几个约束,一般一个控件最多4个约束。
2.设置约束,技巧:先确定需要固定的约束,再去修改值。为什么不能先修改值,因为如果以后先添加一个约束,会把值还原。
Autolayout经验:
1、如果一个控件出错,最好先把之前的约束全部 清空,然后再重新添加。
2、注意使用control方式参照另外一个view,只能添加约束,约束的值默认都是当前的值,如果当前的值不是我们想要的效果,只需要找到对应的约束修改值就好了。
3、如果需要布局很多子控件,先布局好父控件,在布局子控件。
4、一般情况下,都是先固定好一个控件,然后其他控件参照这个控件约束。
5、特殊情况:如果需求中各个子控件的间距一致,宽度需要自动计算,这时候需要把所有子控件拖进去,并且放在一条平行线上进行约束。
二、autolayout错误提示:
黄色警告:当前控件的Frame和约束的Frame不符合,怎么解决:更新frame,(cmd + option + =)
红色错误:1.丢失约束(控件的位置不能确定)2.约束冲突(控件的约束多,系统不知道跟随哪一个约束)
三、sizeClass笔记:
sizeClass作用:用于区别不同屏幕。
sizeClass的布局使用经验:如果使用了any,any的尺寸,约束控件,就不能在其他的尺寸下去,约束了,否则会报约束冲突,any,any一般不推荐使用,什么时候才使用,如果以后只需要关心一套屏幕适配约束的时候,就可以使用any,any.只要以后需要不同尺寸进行约束,就需要根据不同尺寸的进行屏幕适配。
sizeClass中添加子控件的经验,如果一个控件在任何屏幕下都需要显示,在any,any的尺寸下先拖进去,而不是先确定屏幕尺寸,再去拖控件,会容易造成一个Bug,控件在另外一种尺寸下消失。
images.xcassets里面也可以根据不同的尺寸,设置不同的图片
*:any
-:compant
+:regular
四、autoresizing和autolayout区别和使用注意
只要我们项目中使用autoresizing,必须把autolayout,两个不能同时支持
autoresizing:依赖于frame
autoresizing:只能用于子控件和父控件产生联系
autolayout:用于各个控件之间产生联系
autolayout:不依赖与frame
以后枚举中如果有移位运算符<<,>>,就可以用并|,表示同时支持多个枚举
UIViewAutoresizingNone = 0, 不拉伸
UIViewAutoresizingFlexibleLeftMargin = 1 << 0, =》左边间距需要随着父控件拉伸而拉伸
UIViewAutoresizingFlexibleWidth = 1 << 1, =》宽度需要随着父控件拉伸而拉伸
UIViewAutoresizingFlexibleRightMargin = 1 << 2, =》右边间距需要随着父控件拉伸而拉伸
UIViewAutoresizingFlexibleTopMargin = 1 << 3, =》顶部间距需要随着父控件拉伸而拉伸
UIViewAutoresizingFlexibleHeight = 1 << 4, =》高度间距需要随着父控件拉伸而拉伸
UIViewAutoresizingFlexibleBottomMargin = 1 << 5 =》底部间距需要随着父控件拉伸而拉伸
五、autolayout公式:firstItem.top = second.bottom * multiplier + Constant
multiplier:乘积
七、storyboard中专业名称解释
按照control键参照另外一个控件的专业术语解释:
Horizontal Space:水平间距
Vertical Space:垂直间距
Centen Y:中心点Y值一致,用来固定控件垂直
Centen X:中心点X值一致,用来固定控件水平位置
TOP:顶部一致
Bottom:底部一致
Equals Widths:宽度相等
Equals Heights:高度相等
如何让一个控件是另外控件宽度一半:先让两个控件的宽度产生关系,然后再修改值。
red.width = blue.width * 0.5 + 0
八、Autolayout代码实现
一、如何判断约束添加到哪个view,如果约束中参考了其他view,就添加到父控件上,如果只参照自己(宽,高),都是添加到自身控件上。