如果一切都是以编程方式创建而不使用情节提要,如何以编程方式调整 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(没有情节提要)
如何以编程方式更改使用自动布局在情节提要上创建的 UIImageView 的大小?