UITableView无法重新加载contentSize。

3
我有一个UITableView,在UITableView第一次重新加载后添加了一些数据,但是如果我向下滚动,我无法滚动到新数据,如果我滚动,我可以看到新数据,但然后它会自动滚回去,是的,我重新加载了我的UITableView,所以我检查了我的UITableView contentSize,但是在重新加载后它不会改变,但是当我转到另一个视图(UINavigationController)并弹回UITableView后,UITableView contentSize确实会改变,并且可以正常工作!我该如何解决这个问题?
谢谢!

paste ur code too.. :) - Shamsudheen TK
我猜测你的 – numberOfRowsInSection: 或者 – numberOfSections 没有被正确地更新。不过没有代码很难确定问题所在... - SethHB
它们是正确的,但我已经使用insertIndexPaths:修复了它。 - Daan Lemmen
2
@DaanLemmen 请在回答中说明问题的原因和解决方法。你的回答可能会帮助到其他人。谢谢。 - Anupdas
1个回答

0

我遇到了类似的问题,并使用与 Daan 相同的技术解决了它(就我所知)。

在我的情况下,我正在使用静态 UITableView,最初隐藏了一些行和部分(通过从 numberOfSectionsInTableView:tableView:numberOfRowsInSection: 返回适当的值)。我将 VC 推入 nav 堆栈以收集其他数据,然后使用这些数据填充隐藏的 tableview 部分,并调用 tableview 的 reloadData 刷新它。

这在 iOS7 中运行良好,但在 iOS6 中,tableview 的 contentSize.height 从其初始值(218 pts)未改变为新添加的部分的更高值(504 pts)。因此,您无法滚动到 tableview 底部的内容。尝试强制 contentSize 不起作用,因为它立即设置回 218。

更改 tableView 的 contentOffset 允许我滚动到内容底部,但是如果您点击最后一个单元格中的 UITextField,则会随着键盘的显示而飞出屏幕。

我终于想出了一个在iOS6和iOS7中都能正常工作的解决方案。我使用了UITableView的旧的beginUpdates / insert or delete rows and sections / 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];

正如您所看到的,在这种情况下,我不得不从第一个(也是唯一的)部分中删除一行,并在表视图的末尾添加三个部分。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接