dismissModalViewControllerAnimated重置contentOffset

时间:2011-09-18 08:06:57

标签: ios uitableview

我的表视图有问题。当解除其顶部呈现的模态视图控制器时,它总是滚动到顶部。我已经尝试使用KVO观察contentOffset的变化,但是让我看到它的观点却落后于它。

UITableViewController开始,当用户在模态对话框中完成任务时,self.tableView.contentOffset是,我打电话:

[self dismissModalViewControllerAnimated:YES]

随后,当调用viewWillAppear:(BOOL)animated时,self.tableView.contentOffset已设置为0,0。

这应该发生吗?通过在呈现模态视图之前记住滚动位置并在解除模态视图后将其恢复到viewWillAppear中,我能够解决该问题。但这似乎是错误的。我错过了什么吗?

我发现了Dismiss modal view changes underlying UIScrollView中描述的类似问题。

2 个答案:

答案 0 :(得分:5)

看起来这是UITableViewController的默认行为。我在非常简单的应用程序中测试它,它的工作方式与您说的完全相同如果您不喜欢它,请改用UIViewController。

答案 1 :(得分:5)

以下是我如何解决此问题,以便表视图保持原始滚动位置。在我的UITableViewController子类中,我添加了:

@property (assign) CGPoint lastScrollPosition;

然后在实施中,我覆盖了以下内容:

- (void)viewWillAppear:(BOOL)animated
{
    self.tableView.contentOffset = self.lastScrollPosition;
}

- (void)dismissModalViewControllerAnimated:(BOOL)animated
{
    self.lastScrollPosition = self.tableView.contentOffset;
    [super dismissModalViewControllerAnimated:animated];
}

如果您希望您的表格最初显示滚动到非零位置,就像我一样,请不要忘记初始化lastScrollPosition中的viewDidLoad