自定尺寸表视图
Posted
技术标签:
【中文标题】自定尺寸表视图【英文标题】:Self sizing tableview 【发布时间】:2017-06-04 21:56:56 【问题描述】:首先这不是关于如何自动调整tableview 内的单元格大小的问题,更重要的是如何自动调整整个tableview 的大小。
所以我有一个滚动视图,它有一个表格视图和 2 个其他视图作为其子视图。表格视图的单元格已经自动调整大小,同样,这个问题与单个单元格无关。但是,tableview 根本不会调整大小。
我做了什么: 1)设置tableview有一个顶部,底部,前导和尾随约束 2) 将单元格设置为启用自动布局 3) * 我不知道构建时的单元格大小 4) 我在 tableview 上禁用了滚动模式
长话短说,我怎样才能让 tableview 自行调整大小?
编辑
单元格包含一个标签,该标签可以包含多行文本,因此使用自动布局的单元格应该确定表格视图的高度。
以下图片显示了视图的设置方式:
如您所见,tableview 只是视图的一小部分,并且由于 tableview 中的滚动视图已停用,因此应该也不会出现任何滚动问题。
编辑 2
这实际上是它应该如何结束但是,我自己计算这个,每次我想对单元格做一个小的改变时,计算单元格高度的整个代码都需要重写,它是我很难把高度调到合适的位置。
编辑 3
到目前为止,我对 tableview 有一个手动计算的高度约束,但是删除此约束并尝试让自动布局处理 tableview 高度大小会产生以下错误:
滚动视图 需要约束:Y 位置或高度
因此我可以得出结论,tableview 不知道如何使用自动布局根据其单元格自动计算高度。
【问题讨论】:
UITableView
inside UIScrollView
是一种反模式,因为它破坏了单元格的重用,但如果您真的想这样做,请添加高度约束并将其设置为 tableView.contentSize.height
以编程方式并在每个数据之后更新。无法从单元格中确定高度。
根据 cell 高度动态调整表格视图的大小是不寻常的......也许如果你能更好地描述你的最终目标是什么?你说 "tableview 和 2 个其他视图" ... 使用“其他视图”作为表上的页眉和页脚视图可能会更好吗?那么你根本不需要额外的滚动视图。
或者...也许您根本不应该使用表格视图。我猜你不希望有一个 500 多行的表?还有其他方法可以显示重复的可变高度视图,这可能比使用表格视图单元格更好(更容易)。
那么...有什么理由你不想只使用表格视图吗?
好吧,我可以在没有表格视图的情况下做到这一点,但这样做会非常困难和痛苦。如果可以用表格视图来做,我想这样做,否则我会在没有的情况下做
【参考方案1】:
您无需创建高度限制或设置框架。创建 UITableView 的子类,并在其 contentSize
每次更改(即添加或删除新数据)时重新计算其 intrinsicContentSize
。这就是你所需要的:
class SelfSizingTableView: UITableView
override var contentSize: CGSize
didSet
invalidateIntrinsicContentSize()
setNeedsLayout()
override var intrinsicContentSize: CGSize
let height = min(.infinity, contentSize.height)
return CGSize(width: contentSize.width, height: height)
【讨论】:
为什么要设置height = min(.infinity, contentSize.height)
?当contentSize.height
总是小于或等于.infinity
时?还是这样?
@eja08 不错的收获。 .infinity
可以替换为 maxHeight 变量,以便 tbv 在某个点后停止增长。我只是没有在这里包含它。【参考方案2】:
您可以使用tableview.frame = CGRect(x: <some_x>, y: <some_y>, width: <some_width>, height: <some_height>)
更改您的UITableView's
框架
如果您的UITableViewCells
使用自动布局,那么它们应该在UITableView's
框架发生变化时调整大小。
【讨论】:
这个想法是单元格决定了tableviews的高度,而不是相反。 您能否提供一个使用图像或使用此技术的其他应用程序的示例?为什么要让单元格调整表格视图的大小?这并不真正符合任何正常的设计模式,我会根据我对您问题的理解重新考虑这种方法。以上是关于自定尺寸表视图的主要内容,如果未能解决你的问题,请参考以下文章