【发布时间】:2018-02-19 04:26:03
【问题描述】:
我有一个 UIView,它包含一个标签、一个按钮和一个从服务器动态填充其数据的 UITableView。在内容动态填充后,我无法调整父 UIView 的大小以适应其内容。为了演示我的问题,我将包含 UIView 的背景设为蓝色。
使用数据填充 TableView 后,UIView 的高度没有调整导致 Tableview 数据溢出,如下图所示。
我已将 TableView 的底部、前导和尾部空间约束设置为超级视图,并将顶部空间约束设置为按钮。 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 函数中返回的值)。
谢谢
【问题讨论】:
-
Uuuuuuse the Vieeeeew Debuggggerrrrrrrrr,Luuuuuuke!
-
@matt 在 View Debugger 中,TableView 在 3D 视觉中完全消失了,但它确实存在于层次结构中,返回高度 0。但我不明白为什么它应该返回0.
-
视图调试器告诉你原因。它列出了用于调整和定位此视图的约束。如果您看到感叹号,则说明您最后有一个约束错误,视图调试器会告诉您它是什么。 — 我的意思是:您没有提供任何可能让任何人帮助您的信息。但是你可以帮助自己,所以你也可以这样做。
-
另外,您的声明“并且应用了正确的约束”显然是错误的。如果他们是正确的,你就不会有这个问题。同样,由于您没有提供实际细节,因此没有人可以帮助您。现在的问题毫无意义。
-
还有一件事:“这个功能有效”不,它没有。在自动布局控制下设置视图的框架是非法的(除非您将其作为布局的部分)。
标签: ios uitableview swift3 uiview interface-builder