2016-11-07 9 views
0

崩壊をアニメーション化するtableViewヘッダ(ピンク)のトラブルシューティングを試みています。 tableViewHeaderの高さが縮小されるにつれて、テーブルビューのセルはtableView(オレンジ色)の上部でプルアップされます。開始と終了の状態は正しいですが、何とかしてテーブルビューのセルは異なるレートでアニメートされています。何かがここではっきりと間違っています、私はちょうどそれが何であるかを突き止めるように見えません。UITableViewCellsは、collapseing tableHeaderViewとは異なるレートでアニメートします

セルフサイジングテーブルビューセルとtableView.rowHeight = UITableViewAutomaticDimensionを使用しているということが関係しているようです。固定高さのセルを使用すると、すべてが問題ありません。

開始状態:

enter image description here

ミドル状態(注:細胞は既にヘッダの下スライド):

enter image description here

最終状態(レイアウトの最終状態が正しい): enter image description here

ここにコードはありますか崩壊をアニメーション化する。

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()のすぐ上の行に移動し、問題を解決しました。

関連する問題