【问题标题】:UITableView won't reload contentSizeUITableView 不会重新加载 contentSize
【发布时间】:2013-03-04 19:34:47
【问题描述】:

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

谢谢!

【问题讨论】:

  • 也粘贴你的代码.. :)
  • 我猜您的– numberOfRowsInSection:– numberOfSections 没有正确更新。虽然没有一些代码很难说......
  • 它们是正确的,但我已经使用 insertIndexPaths 修复了它:
  • @DaanLemmen 请说明问题的原因并将您的修复作为答案。你的回答可能会帮助另一个人。谢谢。

标签: iphone ios tableview reload


【解决方案1】:

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

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

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

更改 tableView 的 contentOffset 允许我滚动到内容的底部,但如果您点击最后一个单元格中的 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 的末尾。

【讨论】:

    猜你喜欢
    • 2011-09-18
    • 2015-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多