V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
YYYeung
V2EX  ›  iDev

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

  •  
  •   YYYeung ·
    Monsoir · 2016-01-27 00:19:21 +08:00 · 3842 次点击
    这是一个创建于 3259 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    12 条回复    2016-01-28 18:05:27 +08:00
    zhigang1992
        1
    zhigang1992  
       2016-01-27 02:24:54 +08:00   ❤️ 1
    loveuqian
        3
    loveuqian  
       2016-01-27 09:28:20 +08:00 via iPhone
    xib
    预估行高
    kobe1941
        4
    kobe1941  
       2016-01-27 09:44:25 +08:00
    这个要看情况的,有的适合自动布局,有的控件太复杂只能手动算 frame ,取决于需求。
    Wilon
        5
    Wilon  
       2016-01-27 11:29:08 +08:00   ❤️ 1
    Wilon
        6
    Wilon  
       2016-01-27 11:31:02 +08:00
    就像你提到的,如果子视图过多,是不适合使用自动布局的,这时我会用计算 frame 的方式,而且是在展现界面之前就计算好,比如我一次请求 10 个数据来在 tableview 上展示,我会在 10 个数据出现在 tableview 之前就计算好 10 个数据各自的 frame
    EggmanQ
        7
    EggmanQ  
       2016-01-27 11:41:29 +08:00
    1. 提前算好行高
    2. 缓存起来, tableview 需要的时候直接给
    3. 数据更新是回到 1
    HWSTh
        8
    HWSTh  
       2016-01-27 11:51:37 +08:00
    看二楼
    jackisnotspirate
        9
    jackisnotspirate  
       2016-01-27 12:47:12 +08:00
    看一楼
    tedzhou
        10
    tedzhou  
       2016-01-27 15:45:34 +08:00
    看 5 楼
    xhacker
        11
    xhacker  
       2016-01-27 15:54:40 +08:00
    从没遇到因为 Auto Layout 计算导致的卡顿,这类的问题的关键是用 profiling ( Product 菜单 → Profile, Time Profiler )确定到底什么东西花了时间。很可能是加载图片或者其他问题。
    iOran
        12
    iOran  
       2016-01-28 18:05:27 +08:00
    真的有种拜读大作的赶脚。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2332 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 15:56 · PVG 23:56 · LAX 07:56 · JFK 10:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.