2016-11-07 72 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()正上方的行,並解決了問題。