Swift:UITableViewCell rowheight

时间:2017-04-18 17:02:43

标签: ios swift uitableview

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

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

ViewController().tableView.rowHeight = 100

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

谢谢!

1 个答案:

答案 0 :(得分:6)

更新:对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更新函数。)

原始回复

如果您希望所有单元格具有相同的高度,则可以更改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:)而不是rowHeight属性会对性能产生影响。每次显示表视图时,它会在代理上为每个行调用tableView(_:heightForRowAt:),这会导致表视图具有大量行(大约1000或更多)的显着性能问题。另请参阅tableView(_:estimatedHeightForRowAt:)