iOS UITableViewAutomaticDimension RowHeight 性能不佳/跳跃

Posted

技术标签:

【中文标题】iOS UITableViewAutomaticDimension RowHeight 性能不佳/跳跃【英文标题】:iOS UITableViewAutomaticDimension RowHeight Poor Performance / Jumping 【发布时间】:2014-11-13 20:23:59 【问题描述】:

我正在 ios 8 上构建一个基本的表格视图。我观看了 WWDC '14 关于自动调整单元格大小的视频,并试图重现这个概念,但遇到了一些问题。在 viewDidLoad 上:我正在调用:

//estimate for my cells though they may vary

self.tableView.estimatedRowHeight = 300.0;

self.tableView.rowHeight = UITableViewAutomaticDimension;

当我的视图和表格加载时,性能还可以。当我单击一个单元格时,程序会将我带到详细视图。当我点击该视图上的后退按钮并返回到表格视图时,事情就开始变得奇怪了。然后,当我滚动时,单元格开始“跳跃”。通过跳跃,我的意思是他们滚动不流畅——他们倾向于从一个地方猛拉或跳到另一个地方。

我应该补充一点,内存不是问题,因为单元被重复使用并且后台数据很少。我的单元格(在故事板文件中)的约束也是蓝色的,我在调试器中没有看到自动布局约束异常。

还有其他人在 UITableViewAutomaticDimension 中看到过这种行为吗?它只是一个苹果的错误还是还有更多?谢谢。

【问题讨论】:

我也面临同样的问题?有什么解决方法吗? @AhmadRaza 我最终做的是回到手工编码的单元格,以确保完全控制布局和功能。所以基本上,我没有使用界面生成器,而是在代码中布置单元格的所有元素,然后覆盖 tableView:heightForRowAtIndexPath: 来告诉 tableView 每个单元格的高度。 我向苹果提交了一个错误(关于这种行为),他们确认这是一个错误(并且是已经提交的错误的副本),但没有提供更多信息(非常烦人)。所以我假设 UITableViewAutomaticDimesion 已知有点错误。如果可能的话,我现在会避免它。 我已经实现了 WWDC2014 中的示例来演示这个问题,它可以在这里找到:github.com/IndieGoGo/WWDC-Dynamic-Type-Jumpy-Scroll-Issue 也提交了一个没有响应的错误。 【参考方案1】:

我使用self.tableView.rowHeight = UITableViewAutomaticDimension;这一行发现了奇怪的问题

但是,当我用委托方法替换它时,一切都变得更好了。你的情况是:

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
    return UITableViewAutomaticDimension;


- (CGFloat) tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath 
    return 300.0f;

【讨论】:

【参考方案2】:

在代码中再添加一个委托方法

- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath return Approxheight;

它将早于当前时间加载 uitableView。 我希望这对你有用。

【讨论】:

【参考方案3】:

cellForRowAtIndexPath 中添加以下行

cell.textLabel.numberOfLines = 0;

【讨论】:

以上是关于iOS UITableViewAutomaticDimension RowHeight 性能不佳/跳跃的主要内容,如果未能解决你的问题,请参考以下文章

IO模型--阻塞IO,非阻塞IO,IO多路复用,异步IO

IO复用阻塞IO非阻塞IO同步IO异步IO

四种IO模型‘阻塞IO/非阻塞IO/信号驱动IO/异步IO‘

5种IO模型阻塞IO和非阻塞IO同步IO和异步IO

网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO

同步IO异步IO阻塞IO非阻塞IO之间的联系与区别