实现自定义的 UITableViewCell 时候,对于其 subViews ,以前都是使用计算 frame 值来定位的
而最近,学习使用 Masonry ,感觉好方便,写得也好爽啊,于是现在都倾向于使用 Masonry
但问题来了,当使用 Masonry 布局的 Demo 运行在真机上的时候, table view 快速滚动的时候会出现一卡一卡的
然后,看到这篇文章: http://www.cocoachina.com/ios/20160115/15001.html
里面说到了自动布局的缺点:
AutoLayout 相对低效的原因是隐藏在底层的命名为” Cassowary “的约束求解系统。如果布局中子视图越多,那么需要求解的约束也越多,进而返回 cell 给 UITableView 所花的时间也越多。
哪一个更快呢:使用少量的值来执行基本的数学计算,还是找一个求解大量线性等式或不等式的系统么?现在想像一下,用户想要快速地滑动,每个 cell 的自动布局也执行着疯狂的计算。
所以,在这里想问一下:
你们自定义 cell 的时候,用自动布局还是直接计算 frame 呢?
如果使用自动布局,是否有出现卡顿的问题?如果有?又是怎么解决,还是说注定会卡顿?
1
zhigang1992 2016-01-27 02:24:54 +08:00 1
|
2
tigerZhang 2016-01-27 09:19:59 +08:00
|
3
loveuqian 2016-01-27 09:28:20 +08:00 via iPhone
xib
预估行高 |
4
kobe1941 2016-01-27 09:44:25 +08:00
这个要看情况的,有的适合自动布局,有的控件太复杂只能手动算 frame ,取决于需求。
|
5
Wilon 2016-01-27 11:29:08 +08:00 1
|
6
Wilon 2016-01-27 11:31:02 +08:00
就像你提到的,如果子视图过多,是不适合使用自动布局的,这时我会用计算 frame 的方式,而且是在展现界面之前就计算好,比如我一次请求 10 个数据来在 tableview 上展示,我会在 10 个数据出现在 tableview 之前就计算好 10 个数据各自的 frame
|
7
EggmanQ 2016-01-27 11:41:29 +08:00
1. 提前算好行高
2. 缓存起来, tableview 需要的时候直接给 3. 数据更新是回到 1 |
8
HWSTh 2016-01-27 11:51:37 +08:00
看二楼
|
9
jackisnotspirate 2016-01-27 12:47:12 +08:00
看一楼
|
10
tedzhou 2016-01-27 15:45:34 +08:00
看 5 楼
|
11
xhacker 2016-01-27 15:54:40 +08:00
从没遇到因为 Auto Layout 计算导致的卡顿,这类的问题的关键是用 profiling ( Product 菜单 → Profile, Time Profiler )确定到底什么东西花了时间。很可能是加载图片或者其他问题。
|
12
iOran 2016-01-28 18:05:27 +08:00
真的有种拜读大作的赶脚。
|