UIView布局

视图结构


UIView的视图结构

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


从上到下执行


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






最后一个方法,会在ifneeded之后系统立即调用。




基于UIvewcontroller的布局更新流程

只加载uiview,加载顺序正常基于


加载了uibutton会发生蓝色方法执行了两次的事件(页面加载UItableview也会如此)


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


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


更改高度会调用子视图的布局更新



UIView的布局更新流程


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



uiview添加button之后又多了次红色框的uiviewcontroller布局更新



uiview的高度改变只调用了layoutsubviews的方法







强制使视图进行更新






AutoLayout







适配中间50pt约束的代码



multiplier设置是和相对的那个控件的倍数关系



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






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



这些控件可以根据自身内容的大小,来确定控件显示内容的大小。



当红框中的优先级最大的时候,会优先显示这个控件的固有内容大小



1.通过设置优先级来分别达到上图的两种要求



1.第一个是显示全labelB的内容所以需要把labelB的ContentCompressionResistancePriority优先级调高。



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


1.约束对象的优先级低于内容的优先级时候会优先显示内容的优先级,就是右下角的图2.如果优先级相同在这里的代码就会让图片变成40pt进行更改
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容