我要问的问题已经被问了很多,但不完全是我想要的。
很简单,我想改变一个特定单元格的行高,我想在UITableViewCell类本身中这样做。我试图从我的UIViewController调用tableview:
ViewController().tableView.rowHeight = 100
但后来我犯了个错误。所以我的问题是,是否可以更改tableviewcell类本身的行高?如果是,怎么做?
谢谢!
最佳答案
更新:响应Comment
从标记开始,以跟踪单元格是否应展开:
let cellShouldExpand = false
如果要设置高度更改的动画,请调用以下方法:
cellShouldExpand = true
tableView.beginUpdates()
tableView.endUpdates()
并将
heightForRowAt:
更改为:func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if indexPath == indexPathOfCellYouWantToChange && cellShouldExpand {
return 100 // the height you want
} else {
return UITableViewAutomaticDimension
}
}
执行相反的操作以还原更改(即设置
cellShouldExpand = false
并再次调用tableview update函数)。原始回复
如果希望所有单元格具有相同的高度,则可以更改
rowHeight
,但正确的方法不是执行ViewController()...
,因为这样会实例化新的视图控制器。相反,您可以简单地自动引用tableview,如下所示:tableView.rowHeight = 100
或
self.tableView.rowHeight = 100
如果要为特定单元格设置不同的行高,则需要使用
UITableViewDelegate
。在文件顶部声明视图控制器时,可以添加委托一致性:class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
然后在
ViewController
类中,您可以实现以下方法:let indexPathOfCellYouWantToChange = IndexPath(row: 2, section: 0)
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if indexPath == indexPathOfCellYouWantToChange {
return 100 // the height you want
} else {
return UITableViewAutomaticDimension
}
}
(
indexPathOfCellYouWantToChange
应设置为要更改高度的单元格的行和节)Apple文档提供了有关如何正确使用此方法的更多信息:
https://developer.apple.com/reference/uikit/uitableviewdelegate/1614998-tableview
讨论
该方法允许委托指定具有不同高度的行。如果实现了此方法,则它返回的值将覆盖为给定行的
rowHeight
属性指定的值。使用
UITableView
而不是tableView(_:heightForRowAt:)
属性会影响性能。每次显示一个表视图时,它对每个行的代表调用“cc>”,这会导致具有大量行(大约1000个或更多)的表视图的显著性能问题。另请参见rowHeight
。