UIView布局

UIView布局_第1张图片
视图结构


UIView布局_第2张图片
UIView的视图结构

1.在执行views 'Frame 绝对布局时,会默认执行Views constraints。


UIView布局_第3张图片
从上到下执行


1.物理屏幕是由一个个发光的点组成的,ios设备是每隔1/60秒刷新屏幕上的点。


UIView布局_第4张图片



UIView布局_第5张图片



UIView布局_第6张图片
最后一个方法,会在ifneeded之后系统立即调用。




基于UIvewcontroller的布局更新流程

UIView布局_第7张图片
只加载uiview,加载顺序正常基于


UIView布局_第8张图片
加载了uibutton会发生蓝色方法执行了两次的事件(页面加载UItableview也会如此)


点击跳转之后会在disappear后再次执行updateviewconstrints


再次点击黑色视图回到当前页面会再次执行红框第二行方法


UIView布局_第9张图片
更改高度会调用子视图的布局更新



UIView的布局更新流程


更新UIviewController时候调用willlayoutsubview之后更新了uivew约束的updateConstraints,Didlayout之后调用uiview的layoutsubviews方法



UIView布局_第10张图片
uiview添加button之后又多了次红色框的uiviewcontroller布局更新



UIView布局_第11张图片
uiview的高度改变只调用了layoutsubviews的方法



UIView布局_第12张图片



UIView布局_第13张图片



UIView布局_第14张图片
强制使视图进行更新






AutoLayout


UIView布局_第15张图片


UIView布局_第16张图片



UIView布局_第17张图片



UIView布局_第18张图片
适配中间50pt约束的代码



UIView布局_第19张图片
multiplier设置是和相对的那个控件的倍数关系



UIView布局_第20张图片
Priority数值越大这个约束的优先级越高,所以设置viewA高度的优先级999之后(变为选择性约束),约束优先级是从高到低执行的,执行完1000的之后选择性执行999的,在这个例子中,因为viewB的约束已经确定了viewA的高度这个999的约束就不会执行了。



UIView布局_第21张图片




UIView布局_第22张图片
蓝色框的为内容大小,在控件拥有固有内容大小的时候,默认读取intrinsicContentSize的值,Uimageview会读取image.size的属性,UILabel会读取test的FontFmily和FontSize的属性。



UIView布局_第23张图片
这些控件可以根据自身内容的大小,来确定控件显示内容的大小。



UIView布局_第24张图片
当红框中的优先级最大的时候,会优先显示这个控件的固有内容大小



UIView布局_第25张图片
1.通过设置优先级来分别达到上图的两种要求



UIView布局_第26张图片
1.第一个是显示全labelB的内容所以需要把labelB的ContentCompressionResistancePriority优先级调高。



UIView布局_第27张图片
1.第二个篮筐:高宽足够时候是否对内容大小进行拉伸显示 2.当前控件在父视图中控件无法进行完全显示的时候,是否对内容空间进行压缩。


UIView布局_第28张图片
1.约束对象的优先级低于内容的优先级时候会优先显示内容的优先级,就是右下角的图2.如果优先级相同在这里的代码就会让图片变成40pt进行更改

你可能感兴趣的:(UIView布局)