我有一個類似的問題,並使用與大安相同的技術解決它(據我所知)。
在我的情況下,我使用的是靜態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];
正如你所看到的,在這種特殊情況下,我不得不從第一刪除一行(只)部分並在桌面視圖的末尾添加三個部分。
也粘貼你的代碼.. :) – 2013-03-15 22:56:48
我猜你的' - numberOfRowsInSection:'或' - numberOfSections'沒有被正確更新。很難說沒有一些代碼雖然... – SethHB 2013-03-15 23:06:25
他們是正確的,但我已經通過使用insertIndexPaths修復了它: – 2013-03-15 23:20:51