2013-03-15 111 views
3

我有一個UITableView,在第一次重新加載UITableView之後添加了一些數據,但是如果我滾動,我不能向下滾動到新數據我看到新數據,但隨後它滾動自動回來,是的,我重新加載我的UITableView,所以我檢查了我的UITableView contentSize,並且在重新加載後它不會改變,但是當我進入另一個視圖(UINavigationController)並彈出UITableView contentSize確實會改變並且它可以工作!我怎樣才能解決這個問題?UITableView將不會重新加載contentSize

謝謝!

+0

也粘貼你的代碼.. :) – 2013-03-15 22:56:48

+0

我猜你的' - numberOfRowsInSection:'或' - numberOfSections'沒有被正確更新。很難說沒有一些代碼雖然... – SethHB 2013-03-15 23:06:25

+0

他們是正確的,但我已經通過使用insertIndexPaths修復了它: – 2013-03-15 23:20:51

回答

0

我有一個類似的問題,並使用與大安相同的技術解決它(據我所知)。

在我的情況下,我使用的是靜態UITableView,它的某些行和部分最初隱藏了(通過設置適當的返回值,從numberOfSectionsInTableView:tableView:numberOfRowsInSection:)。我將一個VC推到導航堆棧上來收集額外的數據,然後我將使用它填充隱藏的tableview部分,在tableview上調用reloadData來刷新它。

這在iOS7中運行良好,但在iOS6中,桌面視圖的contentSize.height從其初始值(218點)永遠不會改變爲由增加新節得出的更高值(504點)。因此,您無法滾動到tableview底部的內容。試圖強制contentSize不起作用,因爲它立即設置回到218.

更改tableView的contentOffset允許我滾動到內容的底部,但是如果在最後一個單元格中點擊UITextField,它會鞭打屏幕顯示鍵盤。

我終於能夠想出一個在iOS6和iOS7中均可正常工作的解決方案。我用老beginUpdates /插入或刪除行和部分/ UITableView中的endUpdates方法,如下所示:

// change the tableView's data source to reflect insertions/deletions 
[self.tableView beginUpdates]; 
[self.tableView deleteRowsAtIndexPaths:@[ [NSIndexPath indexPathForRow:1 inSection:0] ] withRowAnimation:UITableViewRowAnimationAutomatic]; 
[self.tableView insertSections:[NSIndexSet indexSetWithIndexesInRange:NSRangeFromString(@"1,3")] withRowAnimation:UITableViewRowAnimationAutomatic]; 
[self.tableView endUpdates]; 

正如你所看到的,在這種特殊情況下,我不得不從第一刪除一行(只)部分並在桌面視圖的末尾添加三個部分。