我有一个UIView,它包含一个标签,一个按钮和一个UITableView,它可以从服务器动态填充其数据。在动态填充内容后,我无法调整父UIView的大小以适应其内容。为了证明我的问题,我已经将包含UIView蓝色的背景作为背景。
使用数据填充TableView后,UIView的高度不会调整,导致Tableview数据溢出,如下图所示。
我已将TableView的底部,前导和尾随空间约束设置为superview,并将顶部空间约束设置为按钮。 UIView本身没有设置高度限制。
我实现了一个函数,在填充TableView的内容后手动重新计算UIView的高度。以下功能的代码:
func resizeToFitSubviews()
{
var w: CGFloat = self.frame.size.width,
h: CGFloat = 0
for view in subviews {
if view.frame.origin.y + view.frame.height > h { h = view.frame.origin.y + view.frame.height }
}
self.frame.size = CGSize(width: w, height: h)
}
此功能有效。 UIView调整到看起来正确的大小,但是在执行此操作后TableView消失了:
完全失去了为什么会发生这种情况。标签和按钮似乎不受影响。我要么让它自动布局自动调整UIView的高度,要么调整UIView的大小不会导致TableView消失。
在View Debugger中,TableView返回的高度为0(而行正在返回130,因为这是我在heightForRowAt函数中返回的内容)。
由于
答案 0 :(得分:1)
如果使用自动布局,请勿调整视图框。
制作高度限制并将其调整为计算值。
-
此外,手动计算此高度可能更容易。
height = numberOfRows * heightPerRow