我有:
UITableView
UIViewcontroller
var searchResults: UITableView = UITableView();
自定义UITableViewCell
课程:
class CellSearchResult: UITableViewCell { ... }
我为tableview注册了我的单元格:
searchResults.registerClass(CellSearchResult.self, forCellReuseIdentifier: "Cell");
我有我的tableView方法来填充我的表:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! CellSearchResult
cell.frame.height = 100; <<<< ERROR
...
}
我想更改单元格的高度,如:
cell.frame.height = 100; <<<< ERROR
怎么做?
答案 0 :(得分:4)
您需要覆盖heightForRowAtIndexPath
功能。例如:
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return 100
}
修改强>
如果您不是UITableViewController
的子类,则除非符合UITableViewDelegate
,UITableViewDataSource
协议,否则无法访问tableView函数。你可以通过
class myViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { ....
tableview.delegate = self
tableview.datasource = self
答案 1 :(得分:1)
如果所有单元格的高度相同,则最有效的方法是设置UITableView
本身的rowHeight
属性。
tableView.rowHeight = 100.0
使用会对性能产生影响 tableView:heightForRowAtIndexPath:而不是rowHeight。每一次 显示表视图,它调用tableView:heightForRowAtIndexPath: 在每个行的委托上,这可能导致一个 表视图具有大量的重要性能问题 行(大约1000或更多)。
如果单元格具有可变高度,则需要实现UITableViewDelegate
方法tableView:heightForRowAtIndexPath:
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
var height = // do something to calculate height
return height
}
如果您需要在tableView:heightForRowAtIndexPath:
中进行昂贵的计算,建议您实施另一种UITableViewDelegate
方法,tableView:estimatedHeightForRowAtIndexPath:
(自iOS 7起可用)。您在此方法中添加的任何代码都需要高效。
func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return 100.0
}
提供估计行的高度可以改善用户 加载表视图时的体验。如果表包含变量 高度行,计算所有高度可能是昂贵的 因此导致更长的加载时间。使用估计允许您推迟 从加载时间到滚动的几何计算的一些成本 时间。
答案 2 :(得分:1)
您必须实现以下操作才能在运行时增加特定的行高而不调用reloadData()
增加第10行高度的示例:
rowHightUpdateReqd = true
tableView.beginUpdates()
tableView.reloadRowsAtIndexPaths([NSIndexPath(forRow: 10, inSection: 0)], withRowAnimation: UITableViewRowAnimation.Fade)
tableView.endUpdates()
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
var rowHight: CGFloat = 50
if rowHightUpdateReqd == true{
rowHight = 100
rowHightUpdateReqd = false
}
return rowHight
}
答案 3 :(得分:0)
override func tableView(tableView: UITableView!, heightForRowAtIndexPath indexPath: NSIndexPath!) -> CGFloat {
return 100.0;
}