2012-10-26 71 views
3

我創建了一個UITableViewController。在它內部,我創建了一個從viewForHeaderInSection返回頭部的自定義視圖。如果我進入編輯模式並對單元格重新排序,那麼在滾動期間,重新排序的單元格浮動在自定義標題視圖上方。這將持續到tableview用[tableview reload]重新加載。就好像單元格從重新排序中被移動到視圖堆棧頂部之後一樣。重新排序後,uitableview中的單元格在滾動時位於customheaderviews之上

我在moveRowAtIndexPath方法的末尾找到了[tableView reload]的問題,但我想知道這是否是預期的行爲。我無法在文檔或Google搜索中找到任何有關它的信息。

回答

3

我認爲這是UITableView中的一個錯誤。如果在moveRowAtIndexPath方法中檢查表的視圖層次結構,則可以看到所討論的單元格靠近層次結構的頂部 - 這是爲了在拖動單元格時支持它的外觀。

你不能簡單地移動視圖的層次結構中這種方法背後要麼,因爲它有它的地方的動畫,這似乎重寫。

我不舒服重裝從數據更新方法中的行,所以我的解決方案是包含此代碼:

UITableViewCell *movedCell = [tableView cellForRowAtIndexPath:fromIndexPath]; 
double delayInSeconds = 0.4; 
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); 
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
    [tableView sendSubviewToBack:movedCell]; 
}); 

0.4秒的延遲是給動畫發生在細胞的時間完成。

Radar'd:http://openradar.appspot.com/radar?id=2681402

+0

是的,[tableview reload]當時沒有和我一起坐好。我更喜歡你的方法。 – Ajaxharg

+0

我發現,拖延是不夠的相當長的設備上 - 你可能希望測試後進行調整。 – jrturton

0

這是對你的標題視圖中的自動調整大小的標誌。在xib中移除它們。

相關問題