【问题标题】:UITableView scrolling odd behaviourUITableView 滚动奇怪的行为
【发布时间】:2012-11-02 12:09:17
【问题描述】:

我的应用程序中有一个 TableViewController(有好几个,但这只发生在这个特定的应用程序上)。

内容是使用 NSFetchedResultsController 从核心数据驱动的,TVC 是 NSFetchedResultsControllerDelegate 并使用基于内容更改更新表的方法(即它运行 beginUpdates、endUpdates 等...)。

我之前已经多次这样做了,所以只需使用相同的代码。 (也可以在 Ray Wenderlich 的网站上找到)。

无论如何,我有一个视图(从 TVC 推送)将新项目添加到 CoreData DB。然后应该将这个新项目添加到 TVC 的表中。

这一切都很好。我查看表格上下滚动很好。单击添加。添加新项目。推回 TableView 就可以看到新项目了...

但是

tableView 现在不允许我一直滚动到底部。我可以通过滚动到底部并按住屏幕来查看表格中的新数据,但是当我放手时,tableView 会弹回来,因此我再也看不到它了。

我已经检查了几件事...

  1. TableView的frame前后没有变化。
  2. tableView 的 contentSize 会发生变化以适应添加的单元格。
  3. 滚动时,前后的最小 contentOffset 均为 0(这是正确的)。
  4. 滚动时,MAXIMUM contentOffset 前后相同(这是不正确的)。

如果我弹回 rootVC,然后推回 TVC,那么我可以再次滚动并查看所有新单元格。

我做了一些测试。

如果我使用- (BOOL)shouldAutorotate 重新启用自动旋转,然后执行添加新单元格等动作,那么我仍然无法滚动到底部。但是,如果我旋转横向,然后再转回纵向,那么现在我可以一直滚动到底部。

在此之后,我尝试在 [self.tableView endUpdates]; 之后运行 [self viewWillLayoutSubViews]; 方法,但仍然没有。

就像我说的,我以前做过很多次,没有任何问题。我真的不明白现在发生了什么。

【问题讨论】:

  • viewWillLayoutSubViews 是一种通知方法,要请求布局,您需要使用视图的 setNeedsLayout,我还要检查 tableView 的 autoresizesSubviews 是否设置为 YES。
  • 啊,我没有继承任何视图或任何只是 TableViewController 的子类。 setNeedsLayout 将在 UITableView 上。
  • 是的,请尝试 [self.tableView setNeedsLayout],这应该会有所帮助,因为旋转会有所帮助。我不知道修复确切问题源的原因。
  • 谢谢。我会试试的,然后告诉你。
  • 不幸的是,它也没有排序:(我尝试将 [self.tableView setNeedsLayout] 放在 viewWillAppear 和 endUpdates 之后,但都没有排序。

标签: ios uitableview


【解决方案1】:

我终于找到了一个可行的解决方案!

最后我不得不将[self.tableView reloadData]; 放入viewDidAppear 方法中。

这解决了问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    • 2016-07-18
    • 1970-01-01
    相关资源
    最近更新 更多