如何实现自定义大小的UITableView?

时间:2018-07-23 16:34:28

标签: ios uitableview ios-autolayout

我想根据其内容动态调整UITableView的大小。由于UITableView没有固有的内容大小,因此我必须以编程方式操纵高度约束。但是,我想要一个max_height之后,UITableView停止增长。

每次重新加载时,我将UITableView的高度约束设置为其contentSize。如果contentSize大于定义的边界内的大小,则AutoLayout会抱怨它“无法同时满足约束”。因此,我尝试为UITableView的高度约束赋予优先级999。据我所知,如果AutoLayout必须破坏约束,它将首先破坏优先级最低的约束,并尝试尽可能接近常数。 (完美!)

如果TableView上方的所有物体都具有固定的高度,则可以正常工作,如以下所示:

enter image description here

只要TableView之上的任何内容都依赖于固有的contentSize(如带有两个标签的StackView),它就不再起作用。一旦高度限制太大,没有固定高度的所有内容都会被压缩。 (将抗压强度设置为751,将内容包含优先级设置为249并不会更改)

enter image description here

为了便于验证,我创建了一个GitHub项目(https://github.com/Shanakor/SelfSizing-TableView/branches)。在分支“ master”上,您将找到工作副本,在分支“ not_working”上,您将找到替代方法。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

即使在问题描述中进行了更改,原因仍然是约束的优先级。您的stackview高度是由其固有尺寸定义的。依次根据排列视图的固有大小或高度限制来定义(在这种情况下,这是标签的固有大小)。因此,如果您希望堆栈视图保持其大小(即抵抗压缩),则压缩阻力(堆栈视图及其所有已排列视图)的优先级应高于表视图高度约束的优先级。

因此,您需要将表格视图高度约束的优先级设置为低于UILayoutPriorityDefaultHigh(即至少749),并设置stackView的默认抗压缩性