iOS:在 Swift 中动态设置 UITableView 高度

Posted

技术标签:

【中文标题】iOS:在 Swift 中动态设置 UITableView 高度【英文标题】:iOS: Dynamically set UITableView height in Swift 【发布时间】:2017-03-14 19:07:34 【问题描述】:

我们的 UITableView 存在于 ViewController(而不是 TableViewController)上。我们在运行时用两行填充它。当我们设置高度约束时,表格看起来很好。当我们设置高度约束时,表格完全不会出现。如何设置 UITableView 以动态设置其高度?

我已经看到了关于动态设置行高(效果很好)但不是关于实际表格高度的线程。关于这个特定点有一些线程,但似乎没有一个对我有用。


解决方案更新:按照 Robotic Cat 的建议,我们在 Storyboard 中的 UITableView 上设置了高度限制(我们已经有了),然后按 Ctrl 拖动以在我们的控制器。根据 Vignesh 的回答,我们在 viewWillAppear 中执行以下代码:

tableViewHeightConstraint.constant = tableView.contentSize.height

请注意,在执行上述代码之前,我们以相同的方法调用reloadData() 来填充我们的表格。

【问题讨论】:

约束只是您可以通过IBOutlet 引用的另一个对象。在 Storyboard 中设置视图控制器约束,然后在 UIViewController 子类中创建到 UITableView 高度约束的出口(或控制 UITableView 高度的约束,例如到屏幕底部的距离)。然后为高度设置适当的值(如固定值或屏幕比例)。 【参考方案1】:

我们没有 UITableView 的自动尺寸,它们只会影响 UITableViewCell 的高度。如果要动态设置表格视图高度,我认为最好的方法是在表格视图完成加载后将表格视图高度约束设置为等于其内容大小。我的意思是,

tableViewHeightConstraint.constant = tableView.contentSize.height

【讨论】:

请记住,如果 contentSize.height 小于视图高度,这是可以的。如果您知道您将始终只有两个单元格并且它们将始终具有相同的高度,则可能不需要 tableView,您可以拥有一个简单的 UIView。 @silentBob。我同意谢谢,但我认为这很明显,如果表视图大小是否超过视图高度,马库斯不会问这个问题。为了完成,这可以通过 Wrapping in a MIN(contentSize, viewSize) 轻松解决。 谢谢。将来我们可能有三四行,等等。如果我们这样做,我将使用 min 函数。我们使用表格视图而不是简单的 UIView,因为我们希望每个单元格具有完全相同的布局。我不知道如何在没有表格的情况下将布局“克隆”到不同的行(如果有意义的话..)。【参考方案2】:

您可以通过多种方式更改 tableView 框架,包括动画等。

tableView.frame = CGRect(x: leftTableBorder, y: topTableBorder, width: tableWidth, height: tableHeight)

或者您可以更改与 tableView 相关的约束,然后使用 layoutIfNeeded 更新约束,如果您愿意,也可以进行动画处理。

例如,如果你有一个高度约束属性:

tableViewHeightConstraint.constant = desiredHeight

layoutIfNeeded()

在任何情况下,都需要约束,因此自动布局知道如何呈现表格。

【讨论】:

以上是关于iOS:在 Swift 中动态设置 UITableView 高度的主要内容,如果未能解决你的问题,请参考以下文章

向上滚动 UITable 后的 Swift 5 调用函数

使用 IOS9 时,无法在 UITable 的部分标题上的 UIButtons 上触发触摸事件(IOS10 很好)

通过从上到下滚动表格来刷新 UITable 内容

iOS / Swift 3.0:如何确定 UITableView 中当前可见的行?

如何在 swift 3 中为 UITable 视图提供单元格缩进级别?

Swift iOS尝试动态更改UITextAutocapitalization类型