AutoLayout的前世今生

简介: 今天你用AutoLayout了么?

诞生

AutoLayout是Apple在iOS 6的时候引入的新特性。

AutoLayout使用算法是Cassowary,Cassowary能够有效解析线性等式和线性不等式,用来表示用户界面中的相等关系和不等关系。同时提供一套规则系统,通过约束来描述View之间的关系。

AutoLayout不止有布局算法,还包含了一套布局引擎系统(Layout Engine),用于维护布局在运行时的生命周期。

如何工作

每个View在布局之前,Layout Engine都会先通过计算布局约束,得到View的Size和Position。

Layout Engine会监听约束的变化,当约束发生变化,就会触发约束的重新计算(比如添加、删除View、View的显示隐藏、修改约束条件或者约束优先级)。

在刷新布局时,Layout Engine会从上到下调用layoutSubviews()方法,同时计算出约束的frame,再赋值给View,最后调用superView的setNeedLayout方法来刷新布局。

性能问题

问题出现在View嵌套,并且有同层级View相互关联约束的时候(比如ViewA中,有一个ViewB和ViewC,ViewC有一条约束是ViewC的左侧等于ViewB的右侧偏移10个像素),对性能的影响是呈指数型增长的。

iOS 12之前,每次约束变化时,Layout Engine需要创建一个NSISEngier将约束关系重新计算,所以当约束关系多层嵌套后,计算量会呈指数增长。

iOS 12的Auto Layout更多地利用了Cassowary算法的界面更新策略,提高了约束计算的性能(WWDC 220 Session High Performance Auto Layout),让AutoLayout可以达到和Frame一样的性能。

UIStackView

UIStackView就是Apple在iOS 9时推出的新控件,目的就是仿造前端Flexbox的思路,提高开发效率。再两个相关联的View需要排列时,不再需要添加View之间的约束关系,而可以用Fill,leading,Center来约束他们的排列方式。这是一个推荐的用法。

目录
相关文章
|
11月前
|
XML Java Android开发
Android动画 补间动画
补间动画:属于Android中View动画的一种,就是涵盖了 平移、缩放、旋转 和 透明度四种变化的动画。实现方式有两种:xml文件 和 java代码。 四种补间动画分别为RotateAnimation、ScaleAnimation、TranslateAnimation、AlphaAnimation,他们的父类为Animation。
|
Android开发 iOS开发
IOS开发之UIScrollView约束布局
IOS开发之UIScrollView约束布局
349 0
|
存储 iOS开发
iOS流布局UICollectionView系列五——圆环布局的实现
iOS流布局UICollectionView系列五——圆环布局的实现
222 0
iOS流布局UICollectionView系列五——圆环布局的实现
|
iOS开发 UED
iOS动画开发之一——UIViewAnimation动画的使用
iOS动画开发之一——UIViewAnimation动画的使用
179 0
iOS动画开发之一——UIViewAnimation动画的使用
|
XML Android开发 数据格式
Android动画之补间动画详解
一.概念 补间动画是指开发者无需定义动画过程中的每一帧,只需要定义动画的开始和结束两个关键帧,并指定动画变化的时间和方式等,然后交由Android系统进行计算,通过在这两个关键帧之间插入渐变值来实现平滑过渡,从而对View的内容完成一系列的图形变换来实现动画效果,主要包括四种基本效果:透明变化Alpha、大小变化Scale、位移变化Translate、以及旋转变化Route,这四种效果可以动态组合,从而实现复杂灵活的动画。
1199 0
|
iOS开发 开发者 程序员