适合"适合"的TableView (ala" sizeToFit")其动态单元格的内容大小。然后嵌套在父UIView中,其大小也适合"

时间:2017-07-08 16:44:21

标签: uitableview uiview uiviewcontroller autolayout uiview-hierarchy

我不确定我是否以最佳方式接近这一点。

(1)首先,我想要一个具有任意数量单元格的tableView,其动态单元格高度不同(基于来自Web服务器的内容,无法提前计算)。但是我希望tableView的高度只能增长到适合所有单元格的内容(不是更高或更短)。此表视图将不可滚动(它的父视图将是父级视图)。

(2)然后,我希望tableView嵌套在父UIView中。

我主要是(1)工作,虽然我不知道我的方法是最佳的还是hackish。但我绝对没有(2)工作:(

(下图)Turqoise视图是表View的父级。单元格(红色)和表格大小(白色)是正确的,但父视图比应该更短。

Screen Shot 2017-07-07 at 9.08.45 PM.png

我的代码更改后,我遇到了相反的问题。父高度增长到大约正确的高度,但是tableView被砍掉了。

Screen Shot 2017-07-07 at 9.10.06 PM.png

这是代码更改:

Screen Shot 2017-07-07 at 9.22.31 PM.png

查看层次结构:

Screen Shot 2017-07-07 at 9.11.06 PM.png

如果我没有尝试将tableView放在父UIView中,那么表"大小适合"恰到好处:

Screen Shot 2017-07-08 at 10.02.57 AM.png

rte_eth_stats

完整的代码库位于:https://github.com/jayliew/UITableViewSizeToFitDynamicHeightCells/tree/master/TableViewFitContent

我不确定我需要知道什么,我不知道,但我怀疑它是否能完全理解视图的布局,AutoLayout如何发挥作用,以及viewController生命周期,如viewWillAppear,viewWillLayoutSubviews等(每个阶段如何影响视图的布局,有或没有AutoLayout)。我不是只想解决这个问题,而是更全面地了解架构,如果有人能指出我正确的方向,我会很感激。

1 个答案:

答案 0 :(得分:1)

回答我自己的问题:

我学到的教训不是将AutoLayout与手动创建框架和将视图更改为使用这些框架混合。

我了解到我必须首先人工设置tableView到一个巨大的高度,例如1000,使动态单元格在桌面上“可见”。然后,我只能循环遍历所有这些单元格,获取帧高度,手动将它们全部添加,然后在tableView上设置AutoLayout高度约束的常量,使其等于所有单元格高度的总和。

此外,上述内容必须发生在viewDidAppear()

就是这样!示例代码:https://github.com/jayliew/UITableViewSizeToFitDynamicHeightCells

感谢Github上的@ddustin

Screen Shot 2017-07-13 at 1.45.38 PM.png

Screen Shot 2017-07-13 at 1.45.56 PM.png