小白求教: UITableView 流畅度问题?

2016-01-27 00:19:21 +08:00
 YYYeung

实现自定义的 UITableViewCell 时候,对于其 subViews ,以前都是使用计算 frame 值来定位的
而最近,学习使用 Masonry ,感觉好方便,写得也好爽啊,于是现在都倾向于使用 Masonry

但问题来了,当使用 Masonry 布局的 Demo 运行在真机上的时候, table view 快速滚动的时候会出现一卡一卡的
然后,看到这篇文章: http://www.cocoachina.com/ios/20160115/15001.html
里面说到了自动布局的缺点:

AutoLayout 相对低效的原因是隐藏在底层的命名为” Cassowary “的约束求解系统。如果布局中子视图越多,那么需要求解的约束也越多,进而返回 cell 给 UITableView 所花的时间也越多。
哪一个更快呢:使用少量的值来执行基本的数学计算,还是找一个求解大量线性等式或不等式的系统么?现在想像一下,用户想要快速地滑动,每个 cell 的自动布局也执行着疯狂的计算。

所以,在这里想问一下:
你们自定义 cell 的时候,用自动布局还是直接计算 frame 呢?
如果使用自动布局,是否有出现卡顿的问题?如果有?又是怎么解决,还是说注定会卡顿?

3637 次点击
所在节点    iDev
12 条回复
zhigang1992
2016-01-27 02:24:54 +08:00
tigerZhang
2016-01-27 09:19:59 +08:00
loveuqian
2016-01-27 09:28:20 +08:00
xib
预估行高
kobe1941
2016-01-27 09:44:25 +08:00
这个要看情况的,有的适合自动布局,有的控件太复杂只能手动算 frame ,取决于需求。
Wilon
2016-01-27 11:29:08 +08:00
Wilon
2016-01-27 11:31:02 +08:00
就像你提到的,如果子视图过多,是不适合使用自动布局的,这时我会用计算 frame 的方式,而且是在展现界面之前就计算好,比如我一次请求 10 个数据来在 tableview 上展示,我会在 10 个数据出现在 tableview 之前就计算好 10 个数据各自的 frame
EggmanQ
2016-01-27 11:41:29 +08:00
1. 提前算好行高
2. 缓存起来, tableview 需要的时候直接给
3. 数据更新是回到 1
HWSTh
2016-01-27 11:51:37 +08:00
看二楼
jackisnotspirate
2016-01-27 12:47:12 +08:00
看一楼
tedzhou
2016-01-27 15:45:34 +08:00
看 5 楼
xhacker
2016-01-27 15:54:40 +08:00
从没遇到因为 Auto Layout 计算导致的卡顿,这类的问题的关键是用 profiling ( Product 菜单 → Profile, Time Profiler )确定到底什么东西花了时间。很可能是加载图片或者其他问题。
iOran
2016-01-28 18:05:27 +08:00
真的有种拜读大作的赶脚。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/253608

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX