【发布时间】:2012-11-02 12:09:17
【问题描述】:
我的应用程序中有一个 TableViewController(有好几个,但这只发生在这个特定的应用程序上)。
内容是使用 NSFetchedResultsController 从核心数据驱动的,TVC 是 NSFetchedResultsControllerDelegate 并使用基于内容更改更新表的方法(即它运行 beginUpdates、endUpdates 等...)。
我之前已经多次这样做了,所以只需使用相同的代码。 (也可以在 Ray Wenderlich 的网站上找到)。
无论如何,我有一个视图(从 TVC 推送)将新项目添加到 CoreData DB。然后应该将这个新项目添加到 TVC 的表中。
这一切都很好。我查看表格上下滚动很好。单击添加。添加新项目。推回 TableView 就可以看到新项目了...
但是
tableView 现在不允许我一直滚动到底部。我可以通过滚动到底部并按住屏幕来查看表格中的新数据,但是当我放手时,tableView 会弹回来,因此我再也看不到它了。
我已经检查了几件事...
- TableView的frame前后没有变化。
- tableView 的 contentSize 会发生变化以适应添加的单元格。
- 滚动时,前后的最小 contentOffset 均为 0(这是正确的)。
- 滚动时,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