【问题标题】:How to update a UITableViewCell height after tableView is loaded加载 tableView 后如何更新 UITableViewCell 高度
【发布时间】:2014-05-06 06:49:58
【问题描述】:

自定义UITableViewCell包含一个从web异步加载的图片,它的大小/aspectRatio事先是未知的,所以无法在tableView:heightForRowAtIndexPath:中返回准确的单元格高度。

我可以在委托方法中返回一个估计的高度,但需要在加载图像时通知tableView单元格高度的变化。我该怎么做?

  1. reloadData 太重了,考虑到每次加载图片时,整个 tableView 都会刷新。
  2. reloadRowsAtIndexPaths:withRowAnimation: 也不好。由于单元格本身不会改变,只需更新其高度即可。

【问题讨论】:

  • -(float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ return 100; }
  • 你必须强制重新加载整个表格视图或单元格
  • 您必须重新加载该单元格以获取新高度

标签: ios objective-c uitableview


【解决方案1】:

希望您除了[self.tableView reloadData]; 之外别无选择,无论如何它不会重新加载所有数据 - 它只是重新加载可见单元格。

【讨论】:

    【解决方案2】:

    重新加载可见的表格单元格 - 是最好的。否则,每次您需要完全重新加载表格视图时,它会将您放在第一个单元格上。然后以编程方式,您应该向下滚动特定访问的单元格。这很痛苦。也不是一个好的用户界面。

        [YourTableView reloadRowsAtIndexPaths:[YourTableView indexPathsForVisibleRows] withRowAnimation:UITableViewRowAnimationAutomatic];
    

    仅重新加载下载完成单元格

        [YourTableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:YourImageCompletelyDownloadRow inSection:0]] withRowAnimation:UITableViewRowAnimationAutomatic];
    

    【讨论】:

      【解决方案3】:

      您可以通过调用非常轻松地重新加载表格

      [tableview reloadData];
      

      来自this 回复:

      UITableView 类在单元格即将出现在屏幕上之前从不加载单元格,即使您调用了 reloadData。

      因此只会重新加载可见的单元格。

      【讨论】:

      • 因此,只会重新加载可见单元格,而不是整个 tableView。
      猜你喜欢
      • 2016-12-20
      • 1970-01-01
      • 1970-01-01
      • 2015-08-24
      • 1970-01-01
      • 2021-12-06
      • 1970-01-01
      • 2014-10-23
      • 2013-06-15
      相关资源
      最近更新 更多