单击时,我必须调整tableView的一行的大小。我该怎么做?有人可以帮助我吗?
我的视图控制器类:
class DayViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { @IBOutlet var daysWorkPointTable: UITableView override func viewDidLoad() { super.viewDidLoad() var nipName = UINib(nibName: "daysWorkPointsCell", bundle: nil) self.daysWorkPointTable.registerNib(nipName, forCellReuseIdentifier: "daysWorkCell") } func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int { return 1 } func tableView(tableView:UITableView!, heightForRowAtIndexPath indexPath:NSIndexPath) -> CGFloat { return 75 } func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! { var cell = tableView.dequeueReusableCellWithIdentifier("daysWorkCell", forIndexPath: indexPath) as daysWorkPointsCell return cell } func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) { } }
首先,您必须跟踪属性中当前选定单元格的indexPath:
var selectedCellIndexPath: NSIndexPath?
它应该是可选的,因为您不能选择任何单元格。接下来让我们声明选定状态和未选定状态的高度(将值更改为所需的值):
let selectedCellHeight: CGFloat = 88.0 let unselectedCellHeight: CGFloat = 44.0
现在您必须实现tableView(_:, heightForRowAtIndexPath:):
tableView(_:, heightForRowAtIndexPath:)
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { if selectedCellIndexPath == indexPath { return selectedCellHeight } return unselectedCellHeight }
现在,在您的tableView(_:, didSelectRowAtIndexPath:)方法中,您必须检查是否选中了选定行或未选定行:
tableView(_:, didSelectRowAtIndexPath:)
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { if selectedCellIndexPath != nil && selectedCellIndexPath == indexPath { selectedCellIndexPath = nil } else { selectedCellIndexPath = indexPath } tableView.beginUpdates() tableView.endUpdates() if selectedCellIndexPath != nil { // This ensures, that the cell is fully visible once expanded tableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: .None, animated: true) } }
该beginUpdates()和endUpdates()电话是给你一个动画的高度变化。
beginUpdates()
endUpdates()
如果要更改高度更改动画的持续时间,可以将beginUpdates()和封装endUpdates()在动画块中UIView.animationWithDuration(...),并将其设置为所需的任何值。
UIView.animationWithDuration(...)
您可以签出演示该代码的示例项目。