iOS AutoLayout 自动调整整个表格(不是单元格!)高度

Posted

技术标签:

【中文标题】iOS AutoLayout 自动调整整个表格(不是单元格!)高度【英文标题】:iOS AutoLayout self-sizing whole table (not cells!) height 【发布时间】:2018-10-01 13:45:52 【问题描述】:

我正在创建一个包含相当复杂的滚动视图(视图、表格、视图、图像等)的 ios 应用程序,我很好奇:我可以使用自动布局创建一个自动调整大小的表格吗?

我想要的:如果表格包含三行,那么表格的高度等于这三行,但是如果表格中有50行,那么表格的高度不超过十行。

我查看了约束“高度等于或小于 XXX”,但它显然不起作用。

【问题讨论】:

您应该更改 willDisplayCell 上的表格高度。检查 indexpath 看它是否超过第 9 个然后停止增加表格高度 您可以对每个元素进行动态处理。如果单元格大小是静态的,您可以控制如果 tableview 元素 > 10 ,则返回 10*cellsize 【参考方案1】:

几年前我在this answer 中解释了如何做到这一点。这个答案在 Objective-C 中。将代码翻译成 Swift 很简单,但我会为您完成:

创建UITableView 的子类。在您的子类中,覆盖 intrinsicContentSize:

class MyTableView: UITableView 
    override var intrinsicContentSize: CGSize 
        layoutIfNeeded()
        return CGSize(width: UIView.noIntrinsicMetric, height: contentSize.height)
    

如果您在初始设置后修改表格视图中的行数,您应该在这样做之后将表格视图告诉invalidateIntrinsicContentSize(),例如在您调用reloadData()endUpdates()等之后。或者您可以覆盖MyTableView 中的这些方法,也可以自动调用invalidateIntrinsicContentSize()

【讨论】:

感谢大家的回答,我通过类似的方式解决了一个问题:以编程方式计算行数和设置表格高度。实际上我已经询问了仅通过 AutoLayout 设置动态高度的可能性 - 好吧,看起来这是不可能的:|

以上是关于iOS AutoLayout 自动调整整个表格(不是单元格!)高度的主要内容,如果未能解决你的问题,请参考以下文章

如何在不指定估计行高的情况下使用 iOS 自动调整单元格大小?

Xamarin iOS Autolayout:自动调整各种设备的宽度和垂直滚动,同时保持水平滚动禁用演示链接

AutoLayout(自动布局)

iOS Autolayout 调整标签大小和它们之间的空间

AutoLayout(自动布局)

自动布局 - 在表格单元格中对齐视图