平滑的UITableView细胞扩展与手风琴风格

我的表格视图可以在按下时展开和折叠单元格,但是在animation完成之前单元展开加载时显示的内容。

我留下的是这样的:

UITableView手风琴扩展

我希望看起来像这个例子 。 这个内容看起来好像是在幕后,而细胞扩展animation只是显示它。

这是控制表视图的代码:

class HistoryViewController: UIViewController, UITableViewDataSource, UITableViewDelegate{ var expandedIndexPath: NSIndexPath? // Index path of the cell that is currently expanded let collapsedHeight: CGFloat = 44.0 // Constant to set the default collapsed height var ticketHistoryService = TicketHistoryService() // Service to gather info about Ticket History CoreData var tickets = [Ticket]() @IBOutlet var tableView: UITableView! override func viewDidLoad() { super.viewDidLoad() // Remove any appended table view cells tableView.tableFooterView = UIView() self.tickets = self.ticketHistoryService.fetchData() // Load inital data } // MARK: - Table View Methods func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return self.tickets.count } func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = self.tableView.dequeueReusableCellWithIdentifier("cell") as! HistoryTableViewCell let ticket = self.tickets[indexPath.row] cell.titleLabel!.text = ticket.ticketNumber return cell } func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { if editingStyle == .Delete { self.ticketHistoryService.removeObject(indexPath.row) self.tickets = self.ticketHistoryService.fetchData() tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade) } } func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { self.tableView.beginUpdates() let cell = self.tableView.cellForRowAtIndexPath(indexPath) as! HistoryTableViewCell if indexPath.isEqual(self.expandedIndexPath){ // If currently selected cell was just previously selected self.expandedIndexPath = nil cell.commentLabel.hidden = true } else { self.expandedIndexPath = indexPath cell.commentLabel.hidden = false } self.tableView.endUpdates() } func tableView(tableView: UITableView, willDeselectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? { let cell = self.tableView.cellForRowAtIndexPath(indexPath) as! HistoryTableViewCell cell.commentLabel.hidden = true return indexPath } func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { if indexPath.isEqual(self.expandedIndexPath) { return UITableViewAutomaticDimension } return collapsedHeight } } 

一种方法是让你的单元格剪辑子视图内容扩展到自身之外:

 let cell = self.tableView.dequeueReusableCellWithIdentifier("cell") as! HistoryTableViewCell cell.clipsToBounds = true