如果一切都是以编程方式创建而不使用情节提要,如何以编程方式调整 TableView 中单元格的高度?

Posted

技术标签:

【中文标题】如果一切都是以编程方式创建而不使用情节提要,如何以编程方式调整 TableView 中单元格的高度?【英文标题】:How to programmatically adjust the height of a cell in a TableView if everything is created programmatically, without using a storyboard? 【发布时间】:2020-11-27 11:59:51 【问题描述】:

我查看了很多示例,但不知何故它们不起作用。 我的代码如下。 自定义单元格中的对象约束:

下面是类中的代码:

override func viewDidLoad() 
    super.viewDidLoad()
    tableView.delegate = self
    tableView.dataSource = self
    view.addSubview(tableView)
    tableView.separatorStyle = .none
    tableView.estimatedRowHeight = 200

//表格视图->

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat 
    return 340

【问题讨论】:

什么问题? 在 heightForRowAt 中设置高度,即单元格的设置高度。 请将您的代码添加为代码而不是图像 嗨,萨加尔!我想创建一个动态单元格。单元格的高度应根据标签中文本的数量而变化。 【参考方案1】:

有几件事值得一提:

1。不要在layoutSubviews() 中设置布局

每次对布局进行更改时,都会多次触发此方法,这意味着所有这些约束都会重复,最终会导致问题。尝试将它们设置在单元格的init 中。

2。不执行heightForRowAt

实现此功能时:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat 
    return 340

你告诉 tableview 给单元格这个精确的大小。根据文档:

此方法返回的值优先于 rowHeight 属性中的值。

删除此代码!

3。将rowHeight设置为自动大小值

您已经正确设置了estimatedRowHeight 值,但我们还需要将rowHeight 属性设置为UITableView.automaticDimension

tableView.rowHeight = UITableView.automaticDimension

现在你应该可以开始了!

奖励:滚动性能改进

表格视图将受益于有关单元格大小的任何其他信息,如果您能够计算出比您在初始设置中设置的tableView.estimatedRowHeight 值更好的近似值,您可以使用estimatedHeightForRowAt 提供该信息。

func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat 
    // return more accurate value here

【讨论】:

它工作 100% 非常感谢!!!我将所有约束都移到了单元格的初始化中,这很有帮助。 很高兴听到这个消息!

以上是关于如果一切都是以编程方式创建而不使用情节提要,如何以编程方式调整 TableView 中单元格的高度?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式快速创建 uicollectionview(没有情节提要)

快速以编程方式创建后如何在情节提要中链接 UIButton

如何以编程方式更改使用自动布局在情节提要上创建的 UIImageView 的大小?

以编程方式创建视图和添加子视图比使用情节提要更好/更快[重复]

如何摆脱或更改情节提要以编程方式创建 segue

如何以编程方式从情节提要中填充静态 UITableView?