斯威夫特:UITableViewCell rowheight

Max*_*mVW 0 uitableview ios swift

我要问的问题已经问了很多,但并不是我想要的。

这很简单,我想更改特定单元格的行高,并希望在UITableViewCell类本身中执行此操作。我试图从UIViewController调用tableview:

ViewController().tableView.rowHeight = 100
Run Code Online (Sandbox Code Playgroud)

但是然后我得到一个错误。所以我的问题是,是否可以在tableviewcell类本身中更改rowheight?如果是这样,怎么办?

谢谢!

Pao*_*olo 7

更新:回应评论

从标志开始,以跟踪单元是否应该扩展:

let cellShouldExpand = false
Run Code Online (Sandbox Code Playgroud)

当您要动画化高度变化时,请调用以下方法:

cellShouldExpand = true
tableView.beginUpdates()
tableView.endUpdates()
Run Code Online (Sandbox Code Playgroud)

并更改heightForRowAt:如下:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
  if indexPath == indexPathOfCellYouWantToChange && cellShouldExpand {
    return 100 // the height you want
  } else {
    return UITableViewAutomaticDimension
  }
}
Run Code Online (Sandbox Code Playgroud)

执行相反的操作以还原更改(即,设置cellShouldExpand = false并再次调用tableview更新函数)。

原始回应

如果您希望所有单元格都具有相同的高度,则可以更改rowHeight,除非正确的方法不是这样做,ViewController()...因为这会实例化新的视图控制器。相反,您可以像这样简单地自动引用tableview:

tableView.rowHeight = 100
Run Code Online (Sandbox Code Playgroud)

要么

self.tableView.rowHeight = 100
Run Code Online (Sandbox Code Playgroud)

如果要为特定单元格设置不同的行高,则需要使用UITableViewDelegate。在文件顶部声明视图控制器时,可以添加委托一致性:

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
Run Code Online (Sandbox Code Playgroud)

然后在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
  }
}
Run Code Online (Sandbox Code Playgroud)

indexPathOfCellYouWantToChange应设置为您要更改其高度的单元格的行和部分)

Apple文档提供了有关如何正确使用此方法的更多信息:https : //developer.apple.com/reference/uikit/uitableviewdelegate/1614998-tableview

讨论区

该方法允许委托指定具有不同高度的行。如果实现了此方法,则它返回的值将覆盖为给定行的rowHeight属性指定的值UITableView。使用tableView(_:heightForRowAt:)而不是rowHeight属性会影响性能。每次显示表视图时,它tableView(_:heightForRowAt:)都会为其每个行调用委托,这对于具有大量行(大约1000或更多)的表视图可能会导致严重的性能问题。另请参阅tableView(_:estimatedHeightForRowAt:)