2013-10-27 61 views
13

更新:現在已在iOS 8.0及以上版本中修復此問題。詳情請參閱我接受的答案。刪除UITableView的最後一行時出現動畫問題

我有一個iOS 7的UITableView,我允許在行上進行滑動刪除。我處理缺失:

tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 

有了:

[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationTop]; 

所有行與正確的動畫被刪除,除了最後一個在表中。當用戶滑動顯示刪除按鈕,然後點擊它時,單元格完全離開屏幕向左滑動,但留下一個白色單元格,並且刪除按鈕仍然在上面幾秒鐘,然後突然消失。看起來,所有細胞都發生了這種情況,但其他所有細胞在它們下面都有一排,並向上滑落。

這甚至發生在有問題的行是表中唯一的一行時,我刪除了整個部分而不是僅行。部分標題滑入遺忘狀態,但帶有刪除按鈕的白色單元會稍微粘住。

我想這最後一個單元格具有相同的UITableViewRowAnimationTop動畫,其他人做的。任何想法發生了什麼?

+3

我見過這個完全相同的問題。我很確定這只是iOS 7中UITableView的一個錯誤。 – patr1ck

+0

感謝您的更新。你可以添加更新作爲答案嗎?如果它能夠充分回答你的問題,你甚至可以接受它。總是可以插入更好的答案,然後您甚至可以接受該答案。 –

回答

4

更新:此錯誤已在iOS 8中得到糾正。最後一個單元格刪除現在向左滑動,刪除按鈕向上滑動,背景清晰(沒有更多的白色區域在動畫後突然消失完成)。在iOS 8下運行時,仍然需要以下iOS 7修補程序。

iOS 7修正: 我能夠通過在表格末尾添加另一節以足夠高的節標題視圖來解決此問題。此標題視圖的樣式看起來像表格底部的空白區域,因此您看不到它在那裏。當表格的最後一行被刪除時,這個空白部分的標題會向上滑過,隱藏在那裏的刪除按鈕。這有點破解,但它看起來像是一個表視圖錯誤。

+0

目前,這是我唯一的理智解決方案。唯一需要注意的是我們不能在單元格上使用透明背景。 – Eonil

0

我認爲一種解決方法是始終在表格視圖的最後一行下方維持一個空行。這將做到這一點。

1

作爲Frank Li提到的保持空行的技巧的替代方法,我通過簡單地刪除最後一行來避開這個醜陋的故障:簡單地將單元格動畫化,而不是將單元格動畫化在表視圖上調用-reloadData。

你不會得到任何動畫,但你也不會看到毛刺,所以你的表視圖不會看起來破碎。一個值得的折衷。

0

您也可以使用UITableView.tableFooterView屬性:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    ... 

    CGRect frame = [self.tableView rectForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]]; 
    UIView *view = [[UIView alloc] initWithFrame:frame]; 
    view.backgroundColor = self.tableView.backgroundColor; 
    self.tableView.tableFooterView = view; 
} 

這個代碼進入持UITableView視圖控制器。

  • 代碼假設ARC。
  • 如果您爲表格使用背景圖像,這是一個不同的故事。
  • 該代碼可以被「if(iOS> 7)」子句包圍。
+1

該解決方案刪除通常在空表中顯示的行線。保留表格視圖的庫存外觀的解決方案將是更可取的。 –

0

我的解決方案是簡單地通過隱藏被刪除的單元格來禁用破損的動畫。

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath]; 
    cell.hidden = YES; 
}