heightForRowAt 与estimatedHeightForRowAt 的区别是什么?

cri*_*ka3 3 uitableview ios swift

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

 func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 300
    }
Run Code Online (Sandbox Code Playgroud)

estimatedHeightForRowAt应该什么时候使用它有什么好处。

更新!如果我想设置estimatedHeightForRowAt:

 func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {

        return // what should i put here
    }
Run Code Online (Sandbox Code Playgroud)

更新:
如果我按照我的意愿提供estimatedHeightForRowAt,是否有任何效果表视图滚动?. 例如我给出了estimatedHeightForRowAt 500

And*_*rdo 5

iOS 文档中所述

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


Hon*_*ney 2

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

\n\n

至于放什么东西:

\n\n

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

\n\n
\n\n

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

\n\n
    \n
  1. 创建表视图单元格时使用自动布局。
  2. \n
  3. 将表格视图设置rowHeightUITableViewAutomaticDimension.
  4. \n
  5. 设置estimatedRowHeight或实现高度估计委托方法。
  6. \n
\n\n

基本上做:

\n\n
override func viewDidLoad() {  \n    super.viewDidLoad()\n\n    self.tableView.estimatedRowHeight = 80 // or any other number that makes sense for your cells\n    self.tableView.rowHeight = UITableViewAutomaticDimension\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
\n\n

笔记

\n\n

如果你不给出,estimatedRowHeight那么 tableview 将使更多的单元格出队,因为它试图变得聪明,并且需要为平滑滚动做好准备。它将触发您的cellForRow&willDisplay回调

\n\n

如果你给出estimatedRowHeight一个值,那么它不会再将单元格出队到屏幕外

\n