我的问题是加载速度慢,滚动速度很快。
我必须显示一个包含 10 列的表格:
+-----+-----+-----+-----+-----+-----+-----+- -----+------+------+
|位置 |名称 | Col3 | Col4 | Col5 | Col6 | Col7 | Col8 | Col9 | Col10 |
+-----+-----+-----+-----+-----+-----+-----+- -----+------+------+
| 1 |富 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2 |酒吧 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 3 |巴兹 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+-----+-----+-----+-----+-----+-----+-----+- -----+------+------+
忽略表头(我没有显示它)我正在使用带有子类 UITableViewCell
的 UITableView
来表示数据。
我的自定义 UITableViewCell
有 10 个 UILabel
subview ,都添加到它的 contentView
中。每列一个。
我只是在 UITableView
的 cellForRowAtIndexPath
方法中为每个 UILabel
subview 设置文本值。
任何时候屏幕上大约有 14 行。滚动速度超快。我的 reuseIdentifier
运行良好。
但是,表的初始加载速度明显较慢。比我使用 UITableView
的其他屏幕慢很多,但这些屏幕的列少得多。
我的单元格都设置为不透明
(我知道这是默认设置)。
有什么技巧是我想念的吗?有太多的意见?我应该采取另一种方法吗?或者我做得很好,我应该在我的代码中寻找另一个影响加载时间的问题吗?
更新:
我已经运行了 instruments,大部分时间(500 毫秒 74.5%)是:
CA::Layer::layout_and_display_if_needed(CA::Transaction*)
更新:
一些人认为我的数据是瓶颈。
我正在使用 NSFetchedResultsController
。
没有计算。每行的数据直接从相应的实体加载,数据按原样显示。我不是遍历对象图以从任何其他关系或类似的东西中获取数据。
启用 CoreData SQLDebug
后,我可以看到 20 行的总提取执行时间为 0.0014 秒。我的批量大小设置为 20(略大于屏幕上可见的大小)以帮助滚动。
滚动速度超快,所以我认为这里的数据不是问题。
最佳答案
UITableView 通常用于显示单列数据。 您可以使用 UICollectionView对于这样的事情。
或者,如果您想以困难的方式进行操作,您可以基于 scrollview 实现自己的表格 View 。
但是关于加载缓慢——你是从一些网络服务加载数据还是只是简单的演示,所有数据都具有相同的值?(如果不是——试试这种方式来理解问题)
关于ios - 在 iOS 中显示多列表格的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22142238/