我要问的问题已经被问了很多,但不是我想要的。
这非常简单,我想更改特定单元格的行高,我想在UITableViewCell类本身中执行此操作。我试图从我的UIViewController调用tableview:
ViewController().tableView.rowHeight = 100
但后来我收到了一个错误。所以我的问题是,是否可以更改tableviewcell类本身的rowheight?如果是这样,怎么样?
谢谢!
答案 0 :(得分:6)
以标记开头,以跟踪单元格是否应该展开:
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:)
。