我要问的问题已经被问了很多,但不完全是我想要的。
很简单,我想改变一个特定单元格的行高,我想在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

10-06 16:04