heightForRowAt与estimatedHeightForRowAt的区别是什么?

通常当我想设置我的行高然后设置

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return 300 } 

什么是estimatedHeightForRowAt受益什么时候我应该使用它。

更新! 如果我想设置estimatedHeightForRowAt:

  func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat { return // what should i put here } 

更新:
如果我提供了我的愿望估计,那么是否有任何效果tableview滚动? 。 例如,我在估计的HeightForRowAt 500中给出

当您拥有一些高度与其他大多数单元格不同的自定义单元格时,这种差异会变得更有意义。 在这种情况下,操作系统使用estimatedHeightForRowAt作为默认值(这会优化您的加载时间),但如果为行指定了不同的高度,那么它将使用它。

至于那里放什么:

如果没有变化,那么你把相同的300.基本上你把你的默认/最期望的高度放在那里。 对于heightForRowAt,根据您的需要,您可能希望根据节/行进行切换并更改高度。 如果没有任何变化,那么仍然只需要300


我不确定这是不是你问的原因,但如果你问这个是因为你有不同高度的动态tableViewCells,那么解决方案是:

  1. 创建表格视图单元格时使用“自动布局”。
  2. 将tableview rowHeight设置为UITableViewAutomaticDimension
  3. 设置estimatedRowHeight或实现高度估计委托方法。

基本上做:

 override func viewDidLoad() { super.viewDidLoad() self.tableView.estimatedRowHeight = 80 // or any other number that makes sense for your cells self.tableView.rowHeight = UITableViewAutomaticDimension } 

有关更多信息,请参阅此RW教程和这个高投票的问题

如iOS文档中所述 :

如果表包含可变高度行,则计算所有高度可能会很昂贵,因此会导致更长的加载时间 。 使用估计允许您将几何计算的一些成本从加载时间推迟到滚动时间。