iphone - UITableView 不会重新加载 contentSize

标签 iphone ios tableview reload

我有一个 UITableView,它在 UITableView 第一次重新加载后添加了一些数据,但是我无法向下滚动到新数据,如果我滚动我看到了新数据,但它会自动向后滚动,是的,我重新加载了我的 UITableView,所以我检查了我的 UITableView contentSize,它在重新加载后不会改变,但是在我转到另一个 View (UINavigationController)并弹出后,UITableView contentSize 确实发生了变化并且它有效!我该如何解决这个问题?

谢谢!

最佳答案

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

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

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

更改 tableView 的 contentOffset 允许我滚动到内容的底部,但如果您点击最后一个单元格中的 UITextField,它会在显示键盘时迅速离开屏幕。

我终于能够想出一个在 iOS6 和 iOS7 中都能正常工作的解决方案。我使用了旧的 beginUpdates/insert or delete rows and sections/endUpdates UITableView 的方法,如下:

// 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 的末尾。

关于iphone - UITableView 不会重新加载 contentSize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15443388/

相关文章:

iphone - iAd 在模拟器上有效,但在设备上无效

iphone - 在 SQLite 数据库的 uiwebview 中显示 HTML 文件?

ios - 尝试滑动删除当前单元格时,表格 View 单元格开始晃动

ios - 我可以将 tableview 的数据源绑定(bind)到我的 viewModel 吗

javascript - SproutCore:SC.TableView的替代品

iphone - 如何在 OpenGL ES 中对立方体进行纹理映射?

iphone - 如何访问对象 ID 标识属性?

ios - Objective C UITextField 值空白

ios - 添加第一个项目时(以及删除最后一个项目时)tableView 崩溃

ios - Swift:为什么在 touchesBegan() 中将 UIView 的帧大小引用为 (0.0, 0.0)?