3

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

谢谢!

4

1 回答 1

0

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

在我的例子中,我使用了一个静态 UITableView,它最初隐藏了一些行和部分(通过从numberOfSectionsInTableView:和设置适当的返回值tableView:numberOfRowsInSection:)。我将 VC 推送到导航堆栈以收集其他数据,然后我将使用这些数据填充隐藏的 tableview 部分,在 tableview 上调用 reloadData 以刷新它。

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

更改 tableViewcontentOffset允许我滚动到内容的底部,但如果您点击最后一个单元格中的 UITextField,它会在显示键盘时从屏幕上跳出。

我终于能够想出一个在 iOS6 和 iOS7 中都能正常工作的解决方案。我使用了UITableView的旧beginUpdates/插入或删除行和部分/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];

如您所见,在这种特殊情况下,我必须从第一个(也是唯一一个)部分中删除一行,并将三个部分添加到 tableview 的末尾。

于 2013-10-27T21:58:06.327 回答