UITableView将不会重新加载contentSize

UITableView将不会重新加载contentSize

问题描述:

我有一个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

我有一个类似的问题,并使用与大安相同的技术解决它(据我所知)。

在我的情况下,我使用的是静态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]; 

正如你所看到的,在这种特殊情况下,我不得不从第一删除一行(只)部分并在桌面视图的末尾添加三个部分。