2016-11-07 71 views
0

我想解决一个tableView标题(粉红色),这是动画崩溃。随着tableViewHeader高度的缩小,表格视图单元格应该在tableView(橙色)的顶部拉起来。开始状态和结束状态都是正确的,但表格视图单元不同地以不同的速率动画。有些东西在这里显然是错误的,我似乎无法确定它是什么。UITableViewCells动画不同速率崩溃tableHeaderView

这似乎与我使用自调整表格视图单元格和tableView.rowHeight = UITableViewAutomaticDimension这个事实有关。如果我使用固定高度的细胞,一切都很好。

开始状态:

enter image description here

中东国家(注细胞在头已经滑动):

enter image description here

最终状态(布局的最终​​状态是正确的): enter image description here

这里是代码tha为动画片的崩溃。

func collapseHeader() { 
    UIView.animate(withDuration: 0.25, delay: 0, options: .curveEaseIn, animations: { 
     self.tableView.beginUpdates() 
     if let header = self.tableView.tableHeaderView as? TopicTableHeaderView { 
      header.setHeaderState(state: .collapsed) 
     } 

     self.sizeHeaderToFit() 
     self.view.layoutIfNeeded() 
     self.tableView.endUpdates() 
    }) { (bool) in 
     print("collapse completed") 
    } 
} 

func sizeHeaderToFit() { 

    if let headerView = tableView.tableHeaderView { 
     let height = headerView.systemLayoutSizeFitting(UILayoutFittingCompressedSize).height 
     var frame = headerView.frame 
     frame.size.height = height 

     if headerView.frame.height != height { 
      headerView.frame = frame 
      tableView.tableHeaderView = headerView 
      headerView.setNeedsLayout() 
      headerView.layoutIfNeeded() 
     } 
    } 
} 

回答

0

而问题就在于我打电话给self.tableView.beginUpdates()。我将其移至self.tableView.endUpdates()正上方的行,并解决了问题。