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来约束他们的排列方式。这是一个推荐的用法。

目录
相关文章
|
2月前
|
安全 iOS开发
iOS页面布局:UIScrollView的布局问题
iOS页面布局:UIScrollView的布局问题
62 8
|
2月前
|
XML 编解码 Android开发
安卓开发中的自定义视图控件
【9月更文挑战第14天】在安卓开发中,自定义视图控件是一种高级技巧,它可以让开发者根据项目需求创建出独特的用户界面元素。本文将通过一个简单示例,引导你了解如何在安卓项目中实现自定义视图控件,包括创建自定义控件类、处理绘制逻辑以及响应用户交互。无论你是初学者还是有经验的开发者,这篇文章都会为你提供有价值的见解和技巧。
46 3
|
iOS开发
iOS界面布局之四——使用第三方库Masonry进行autolayout布局(二)
iOS界面布局之四——使用第三方库Masonry进行autolayout布局
219 0
iOS界面布局之四——使用第三方库Masonry进行autolayout布局(二)
|
Android开发 iOS开发
IOS开发之UIScrollView约束布局
IOS开发之UIScrollView约束布局
419 0
|
iOS开发
iOS小技能:自动布局实现兄弟控件N等分且宽高比例是1:N(xib 上实现)
本文为 iOS视图约束专题的第三篇:xib上使用自动布局教程
182 0
|
iOS开发
iOS界面布局之三——纯代码的autoLayout及布局动画(一)
iOS界面布局之三——纯代码的autoLayout及布局动画
391 0
iOS界面布局之三——纯代码的autoLayout及布局动画(一)
|
iOS开发
iOS界面布局之三——纯代码的autoLayout及布局动画(二)
iOS界面布局之三——纯代码的autoLayout及布局动画(一)
258 0
iOS界面布局之三——纯代码的autoLayout及布局动画(二)
|
存储 iOS开发
iOS流布局UICollectionView系列五——圆环布局的实现
iOS流布局UICollectionView系列五——圆环布局的实现
289 0
iOS流布局UICollectionView系列五——圆环布局的实现
|
iOS开发
iOS界面布局之四——使用第三方库Masonry进行autolayout布局(一)
iOS界面布局之四——使用第三方库Masonry进行autolayout布局
187 0
iOS界面布局之四——使用第三方库Masonry进行autolayout布局(一)
|
Android开发 iOS开发
Xamarin自定义布局系列——瀑布流布局
原文:Xamarin自定义布局系列——瀑布流布局 Xamarin.Forms以Xamarin.Android和Xamarin.iOS等为基础,自己实现了一整套比较完整的UI框架,包含了绝大多数常用的控件,如下图 虽然XF(Xamarin.Forms简称XF,下同)为我们提供大这么多的控件,但在实际使用中,会发现这些控件的可定制性特别差,基本上都需要里利用Renderer来做一些修改。
1129 0