我有一个UITableView,它在第一次重新加载UITableView后添加了一些数据,但如果滚动我无法向下滚动到新数据我会看到新数据然后它会自动向后滚动,是的我重新加载我的UITableView,所以我检查了我的UITableView contentSize并且它在重新加载后不会改变但是在我转到另一个视图(UINavigationController)并弹回UITableView之后,contentSize确实发生了变化并且它有效!我该如何解决这个问题?
谢谢!
答案 0 :(得分:0)
我遇到了类似的问题并使用与Daan相同的技术解决了它(据我所知)。
在我的情况下,我使用的是静态UITableView,其最初隐藏了一些行和部分(通过设置numberOfSectionsInTableView:
和tableView:numberOfRowsInSection:
的相应返回值)。我正在将VC推入导航堆栈以收集其他数据,然后我将用它来填充隐藏的tableview部分,在tableview上调用reloadData来刷新它。
这在iOS7中运行良好,但在iOS6中,tableview的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];
正如您所看到的,在这种特殊情况下,我不得不从第一个(也是唯一的)部分删除一行,并在tableview的末尾添加三个部分。