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 自动调整单元格大小?