【问题标题】:Resizing UIView causes child table UITableView to disappear调整 UIView 大小导致子表 UITableView 消失
【发布时间】: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


【解决方案1】:

如果您使用自动布局,请不要调整视图框架。

进行高度限制并将其调整为您的计算值。

-

另外,手动计算这个高度可能更容易。

height = numberOfRows * heightPerRow

【讨论】:

  • 我没有高度限制(我也不认为有必要,因为我一直期望基于内容的高度未知)。我的印象是自动布局会根据我设置的所有其他约束自动确定高度。感谢您的澄清。你需要像这样务实地改变高度似乎相当麻烦。我认为 TableViews 和 StackViews 的目的是让这类东西自动化。我确定高度的计算与您的计算大致相同,但我还为标签和填充添加了高度。
  • tableview 也是一个滚动视图,因此当单元格更改时,实际的 tableview 大小不会改变。它只是调整它的 contentView 大小以适应所有单元格并在 tableview 内滚动。
  • 我的意思是在正常使用中,无论单元格数量如何,您都可以将 tableview 设置为固定大小,然后它将在您指定的区域中自动管理滚动。如果你想做一些不寻常的事情,比如让父视图增长以适应 tableview contentView,那么它会变得有点繁琐。
  • 知道了——是的,我禁用了滚动,因为在我的情况下,tableview 不是根视图。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-02
相关资源
最近更新 更多