Swift - 在 Xib 中动态设置 UITableView 高度

Posted

技术标签:

【中文标题】Swift - 在 Xib 中动态设置 UITableView 高度【英文标题】:Swift - Dynamically set UITableView height in Xib 【发布时间】:2018-07-12 06:57:51 【问题描述】:

我尝试在 Xib 中动态设置 tableView 高度。但是所有元素都在 xib 视图中动态变化,并且我没有达到 tableview 之前最后一个元素的“y”位置。

我尝试了类似的方法,但没有成功。它显示在 mainView 的顶部。

techTableView = mainView?.technicalTableView

self.techTableView?.frame = CGRect(
    x: 0,
    y: (self.techTableView?.topAnchor.constraint(equalTo: (mainView?.productInformation.bottomAnchor)!, constant: 25).constant)! ,
    width: self.view.frame.size.width,
    height: 35)

【问题讨论】:

你想改变表格视图或表格视图单元格的高度 表格视图。我设置了单元格高度。 你不需要每次使用 UITablviewAutomaticDimension 计算单元格的大小,它会自动计算单元格的大小,只要确保你有正确的约束 【参考方案1】:

使用布局锚来设置约束而不是设置框架。您可以执行以下操作来设置 tableview 的约束:

techTableView.translatesAutoresizingMaskIntoConstraints = false

    techTableView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor).isActive = true
    techTableView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor).isActive = true
    techTableView.topAnchor.constraint(equalTo: mainView.bottomAnchor).isActive = true
    techTableView.heightAnchor.constraint(equalToConstant: 35).isActive = true

【讨论】:

谢谢你的提前。【参考方案2】:

您的代码似乎令人困惑,您试图通过使用锚来设置表格视图框架,这不是它的工作方式。如果您的目标是通过设置约束来完成,那么您应该在添加表格视图之后执行此操作,而不管其框架的值如何。

因此,在确保 techTableView 已添加到其父视图(例如:view.addSubview(tableView))之后,您需要实现以下内容:

tableView.translatesAutoresizingMaskIntoConstraints = false

// x axis:
tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 0.0).isActive = true
// y axis:
tableView.topAnchor.constraint(equalTo: mainView?.productInformation.bottomAnchor, constant: 25.0).isActive = true
// width:
tableView.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 1.0).isActive = true
// height:
tableView.heightAnchor.constraint(equalToConstant: 35.0).isActive = true

此时应该会按预期显示,已经被约束处理了,不需要编辑框架(默认为CGRect.zero)。

【讨论】:

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

Swift将文本分配给xib文件中的标签

在 Swift 中以编程方式设置 XIB 文件的约束

UITableView 单元格的动态高度问题(Swift)

我想通过在 Swift 中以编程方式将 UINavigationController 与 UITableViewController 嵌入 UITableViewController 这是 UITab

Swift 怎么用xib 自定义View

Swift:无法从 xib 访问子视图