如果一切都是以编程方式创建的,而不使用故事板,如何以编程方式调整 TableView 中单元格的高度?
How to programmatically adjust the height of a cell in a TableView if everything is created programmatically, without using a storyboard?
我看过很多示例,但不知何故它们不起作用。
我的代码如下。
自定义单元格中的对象约束:
下面是class中的代码:
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
}
有几件事值得解决:
1。不要在 layoutSubviews()
中设置布局
每当对布局进行更改时,此方法将被多次触发,这意味着所有这些约束都将被复制,并最终会导致问题。尝试将它们设置在单元格的 init
中。
2。不执行 heightForRowAt
实现此功能时:
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 340
}
你是在告诉 tableview 给单元格这个精确的大小。根据文档:
The value returned by this method takes precedence over the value in the rowHeight property.
删除此代码!
3。将 rowHeight
设置为自动大小值
您已经正确设置了 estimatedRowHeight
值,但我们还需要将 rowHeight
属性 设置为 UITableView.automaticDimension
.
tableView.rowHeight = UITableView.automaticDimension
现在你应该可以开始了!
奖励:滚动性能改进
Table 视图将从有关单元格大小的任何其他信息中受益,如果您能够计算出比 [=21= 更好的近似值,则可以使用 estimatedHeightForRowAt
提供该信息] 您在初始设置中设置的值。
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
// return more accurate value here
}
我看过很多示例,但不知何故它们不起作用。 我的代码如下。 自定义单元格中的对象约束:
下面是class中的代码:
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
}
有几件事值得解决:
1。不要在 layoutSubviews()
中设置布局
每当对布局进行更改时,此方法将被多次触发,这意味着所有这些约束都将被复制,并最终会导致问题。尝试将它们设置在单元格的 init
中。
2。不执行 heightForRowAt
实现此功能时:
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 340
}
你是在告诉 tableview 给单元格这个精确的大小。根据文档:
The value returned by this method takes precedence over the value in the rowHeight property.
删除此代码!
3。将 rowHeight
设置为自动大小值
您已经正确设置了 estimatedRowHeight
值,但我们还需要将 rowHeight
属性 设置为 UITableView.automaticDimension
.
tableView.rowHeight = UITableView.automaticDimension
现在你应该可以开始了!
奖励:滚动性能改进
Table 视图将从有关单元格大小的任何其他信息中受益,如果您能够计算出比 [=21= 更好的近似值,则可以使用 estimatedHeightForRowAt
提供该信息] 您在初始设置中设置的值。
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
// return more accurate value here
}