sizeToFit()返回错误的高度 - 需要在heightForRow中找到单元格宽度

时间:2016-01-11 21:46:03

标签: ios swift uilabel

我正在尝试根据内容制作具有动态单元格高度的UITableView。我的应用是文章查看器。我尝试用这些函数计算细胞的高度。

imageH: 297.25, titleH: 44.5 detailH: 56.5 totalH:398.25

当我运行时,它看起来像这样,你可以看到,底部标签被切断了。

enter image description here

我通过界面断点来运行它,在那里你可以看到错误的原因:

enter image description here

渲染的大小比sizeToFit()的估计大小大一个,正如您在我的日志语句中看到的那样:

{{1}}

我怀疑这个计算错误的原因是由于我使用错误的宽度参数提供了heightForView函数。我曾尝试使用tableView.contentSize等许多其他东西。 lineBreakMode在我的故事板和我的代码中是相同的。

我想我需要的是一种更好的方法来找到细胞的预期宽度,或任何其他能给我正确预期高度的解决方案。

编辑:约束: enter image description here

1 个答案:

答案 0 :(得分:1)

自动尺寸

使用更少的代码(*),您可以完全抛弃heightForRowAtIndexPath,并将autolayout用于所有内容。

  1. 不要覆盖heightForRowAtIndexPath(所有代码都会消失)
  2. 告诉表格视图进行艰苦的工作(例如在viewDidLoad中):
  3.     self.tableView.estimatedRowHeight = 88
        self.tableView.rowHeight = UITableViewAutomaticDimension
    

    (*) 2行代码,确切地说。 通过将2 lines solutionmultiple methods override solution进行比较来说服自己。

    保证金说明

    • XIB& storyboard:您可以控制约束及其与保证金的关系 请注意,使用相对于保证金时,项目顺序很重要,因为边距通常是插入的。 有关详细信息,请参阅https://stackoverflow.com/a/25420909/218152

    • storyboard:您可以访问 IB 中的其他topLayoutGuidebottomLayoutGuide属性,这些属性可能对您的视图控制器有价值,但对于UITableViewCell

    • 而言,这是偏离主题的