调整UIView的大小会导致子表UITableView消失

时间:2017-09-11 01:22:55

标签: ios uitableview swift3 uiview interface-builder

我有一个UIView,它包含一个标签,一个按钮和一个UITableView,它可以从服务器动态填充其数据。在动态填充内容后,我无法调整父UIView的大小以适应其内容。为了证明我的问题,我已经将包含UIView蓝色的背景作为背景。

使用数据填充TableView后,UIView的高度不会调整,导致Tableview数据溢出,如下图所示。

enter image description here

我已将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消失了:

enter image description here

完全失去了为什么会发生这种情况。标签和按钮似乎不受影响。我要么让它自动布局自动调整UIView的高度,要么调整UIView的大小不会导致TableView消失。

在View Debugger中,TableView返回的高度为0(而行正在返回130,因为这是我在heightForRowAt函数中返回的内容)。

由于

1 个答案:

答案 0 :(得分:1)

如果使用自动布局,请勿调整视图框。

制作高度限制并将其调整为计算值。

-

此外,手动计算此高度可能更容易。

height = numberOfRows * heightPerRow