2013-01-19 54 views
0

我有一個應用程序與3個部分,每個頁腳。我已經通過viewForFooterInSection建立了它,併爲每個使用heightForFooterInSection設置了高度。iOS - 高度變化的動畫ForFooterInSection

這些頁腳並非固定大小,因爲它們根據某些事物更改高度。當高度發生變化時,這是一個非常波濤洶涌的動畫。它不是顯示高度變化,而是從舊的高度跳到新的高度。

if (condition == YES) { 
    return 45; 
} 

else { 
    return 70; 
} 

有沒有辦法讓這個高度變化動畫以提供更流暢的體驗?謝謝!

+0

您是否嘗試過使用類似於動畫單元格高度更改的解決方案http://stackoverflow.com/questions/460014/can-you-animate-a-height-change-on-a-uitableviewcell-when-selected? –

+0

哈,我只是把它放在下面的答案中。 – jrturton

回答

0

創建自定義頁腳視圖,並保持它的局部變量...

- (UIView*)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { 
    return self.footerView; 
} 

那麼你應該能夠調用

[self.footerView updateHeightForCondition:YES]; //or NO 

需要。

這將是這樣的......

[UIView animateWithDuration:0.5f animations:^{ 
    self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, condition ? 45 : 70); 
}]; 

如果覆蓋viewForFooter你不需要重寫heightForFooterInSection或titleForFooterInSection了。

0

這適用於動畫更改單元格高度的動畫,我沒有看到爲什麼它不能用於頁眉和頁腳高度的原因。我現在無法自己測試這個,所以如果它不起作用,我會道歉,讓我知道,我會刪除它。

對模型或控制器屬性做任何更改(例如,下次調用heightForFooter ..時,將返回新值)。然後,只需撥打:

[self.tableView beginUpdates]; 
[self.tableView endUpdates]; 

這似乎是不尋常調用這兩個方法之間有什麼,但是這會導致表來重新查詢其委託和數據源,以獲得新的大小,和動畫到新的大小。通常您會添加或刪除行,但也會覆蓋更改大小。