2013-10-20 70 views
11

摘要: 在編輯模式下,我在表視圖中使用自定義編輯控件刪除行,而不是默認的紅色減號和刪除確認按鈕。勾選一行或多行,然後點擊工具欄中的刪除按鈕。它與郵件應用中看到的行爲類似。請參閱下面的截圖。不規則動畫

enter image description here

問題: 通過調用所生成到deleteRowsAtIndexPaths:withRowAnimation:的動畫是不規則的。例如,這裏就是發生在我使用下排動畫(即UITableViewRowAnimationBottom)刪除選中行(主題#7)中的截圖:

  1. 主題#8幻燈片下面和後面的主題#7
  2. 受試者#8簡要地隱藏在對象#7
  3. 受試者#8替換對象#7刺耳

這兩者上模擬器和設備上發生。自動動畫類型(即UITableViewRowAnimationAutomatic)在刪除上述主題#7時會產生相同的不規則行爲。

Top動畫類型在模擬器中按預期工作,但會在設備上產生不一致的動畫動畫。

淡入淡出類型動畫是在模擬器和設備上按預期工作的唯一動畫。

詳細

我針對的iOS 7,並用故事板,純自動佈局和核心數據。

這裏的操作方法,我刪除行:

- (void)deleteButtonTapped:(UIBarButton *)sender 
{ 
    // update table view's data 
    [self.listOfItems removeObjectsAtIndexes:self.indexSetOfTickedRows]; 

    // create index paths for ticked rows 
    NSMutableArray *indexPaths = [[NSMutableArray alloc] init]; 

    [self.indexSetOfTickedRows enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) { 
     [indexPaths addObject:[NSIndexPath indexPathForRow:idx inSection:0]]; 
    }]; 

    [self.tableView deleteRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationBottom]; 

    // update Core Data and UI... 
} 

我曾嘗試:

表格單元格子類覆蓋layoutSubviews。然而,即使當我評論出layoutSubviews時,不規則的動畫仍然存在。

我還從表格單元格中刪除了自定義可tickable編輯控件,然後對操作方法中特定行的刪除進行硬編碼。不規則的動畫持續存在。

正如其他人所建議的,我試過在致電beginUpdatesendUpdates之間撥打deleteRowsAtIndexPaths:withRowAnimation:。這不能解決問題。

有關下一步做什麼的建議,或者最好的猜測爲什麼我看到這些不規則的動畫?

更新(的iOS 7.1):

問題仍然瞄準的iOS 7.1之後。將繼續依賴淡入淡出動畫。

+1

我有類似的問題,我得到奇怪的動畫,其中分隔線向一個方向移動,另一個單元格內容。我再次使用純自動佈局和iOS7。似乎對我來說越野車。 – Camsoft

+0

線程未正確完成時,我看到了這種行爲。那將是我看起來的第一個地方。 –

+0

你不需要調用'begin'和'end'更新嗎? – Remover

回答

0

嘗試增加[tableView beginUpdates];[tableView endUpdates];

+0

不能解決問題。我認爲這是一個錯誤。目前,我正在使用淡出的動畫,其行爲如預期。 – bilobatum

0

也許設置在單元作品阿爾法這裏建議。但不知道。 problems with animation when deleting the last row of a TableView in ios7

+0

你是什麼意思?在你提到的文章中,我沒有看到任何關於alpha的提及。 – bilobatum

+0

對不起。我的意思是指以上更新的鏈接。它對我有點幫助,即將被刪除的單元格隱藏起來。這改善了我的動畫,因爲否則它看起來有點奇怪,因爲我有不同高度的細胞。但顯然,設置Alpha版在iOS6中效果不佳。所以我採取了'隱藏'屬性設置爲'是'。 –

1

嘗試調用 [self.listOfItems removeObjectsAtIndexes:self.indexSetOfTickedRows]; 在函數而不是在開始的結束。