我的应用程序中有一个 TableViewController(好几个,但这只发生在这个特定的应用程序上)。
内容是使用 NSFetchedResultsController 从 Core Data 驱动的,TVC 是 NSFetchedResultsControllerDelegate 并使用基于内容更改更新表的方法(即它运行 beginUpdates、endUpdates 等...)。
我以前做过很多次,所以只需使用相同的代码。(也可以在 Ray Wenderlich 的网站上找到)。
无论如何,我有一个视图(从 TVC 推送)将新项目添加到 CoreData 数据库中。然后应该将这个新项目添加到 TVC 的表中。
这一切都很好。我查看表格上下滚动很好。单击添加。添加新项目。推回 TableView,我可以看到新项目...
但
tableView 现在不允许我一直滚动到底部。我可以通过滚动到底部并按住屏幕来查看表格中的新数据,但是当我放手时,tableView 会弹回来,所以我再也看不到它了。
我检查了几件事...
- TableView 的 frame 前后没有变化。
- tableView 的 contentSize 确实会更改以适应添加的单元格。
- 滚动时,前后的最小 contentOffset 均为 0(这是正确的)。
- 滚动时,MAXIMUM contentOffset 前后相同(这是不正确的)。
如果我弹回 rootVC,然后推回 TVC,那么我可以再次滚动并查看所有新单元格。
我做了一些测试。
如果我重新启用自动旋转,- (BOOL)shouldAutorotate
然后通过添加新单元格等的动作,我仍然无法滚动到底部。但是,如果我旋转横向然后回到纵向,那么现在我可以一直滚动到底部。
在此之后,我尝试在[self viewWillLayoutSubViews];
之后运行该方法,[self.tableView endUpdates];
但仍然没有。
就像我说的,我以前做过很多次,没有任何问题。我真的不明白现在发生了什么。