heightForRowAt与estimatedHeightForRowAt有什么区别?

时间:2017-07-23 16:48:58

标签: ios swift uitableview

通常,当我想设置行高时,请设置

## Reproducible e.g.
dir.create("path/to", recursive=TRUE)
cat("Hello world", "path/to/eg.Rmd")

## Check how it works
ezknitr::ezknit("path/to/eg.Rmd")
dir("path/to/")
[1] "eg.html" "eg.md"  "eg.Rmd" 

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return 300 } 什么时候应该使用它?

更新!如果我想设置estimatedHeightForRowAt:

estimatedHeightForRowAt

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

2 个答案:

答案 0 :(得分:4)

正如iOS documentation

中所述
  

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

答案 1 :(得分:1)

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

至于放在那里:

如果没有变化,那么你将相同的300.基本上你把你的默认/最期望的高度放在那里。对于heightForRowAt,根据您的需要,您可能需要switch based on section/row并更改身高。如果没有任何变化,那么仍然只需要300那里

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

  1. 创建表格视图单元格时使用自动布局。
  2. 将表格视图rowHeight设置为UITableViewAutomaticDimension
  3. 设置estimatedRowHeight或实施身高估算委托方法。
  4. 基本上做:

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

    有关详情,请参阅此RW Tutorial以及此高票question