2015-07-21 106 views
0

在我的tableview中,我需要爲每個單元格的UI設置動畫效果,因爲tableview會重新加載其數據。UITableView ReloadData動畫單元格UI

這需要一個自定義動畫,而不僅僅是一個淡入淡出或默認轉換。

例如,當點擊「編輯」按鈕時,在我的視圖中,tableview將重新加載,並且每個單元格將更新其用於此新編輯模式的UI。

但是,在此重新加載期間,我嘗試使用UIView動畫塊來更新我的單元格中的UILabel的約束,但它不會動畫。

這是我運行的代碼,當我在我的tableview上調用reloadData。這在cellForRowAtIndexPath方法中被調用。

[UIView animateWithDuration:0.3f delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^ 
    { 
     //does not animate 
     _lblContainerLeftConstraint.constant = 18; 
     [self setNeedsLayout]; 

     //does animate 
     _reorderIcon.alpha = 0.5f; 

    } completion:nil]; 

任何幫助將不勝感激,謝謝。

+1

我認爲你需要在'willDisplayCell'中做到這一點。在動畫塊之前設置新的約束值並調用'[cell.contentView setNeedsLayout]'。然後在動畫塊中添加'[cell.contentView layoutIfNeeded]',該動畫塊應該在您的時間段內動畫約束變化。 –

+0

這個伎倆!謝謝@RoryMcKinnel在下面放下正式答案,如果你喜歡,我會打勾。 –

+0

很高興工作。發佈爲答案。 –

回答

0

我認爲你需要在willDisplayCell而不是cellForRowAtIndexPath中做到這一點,因爲它在顯示之前被調用,儘可能接近它實際出現在屏幕上的點。

然後在動畫塊之前設置新的約束值,並且還調用[cell.contentView setNeedsLayout]來指示單元格內容需要佈局。

最後只添加[cell.contentView layoutIfNeeded]和你的alpha變化動畫塊,應該動畫你的時間段內的約束變化。