dismissModalViewControllerAnimated重置contentOffset

Pal*_*ndo 7 uitableview ios

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

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

[self dismissModalViewControllerAnimated:YES]
Run Code Online (Sandbox Code Playgroud)

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

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

我发现在UIScrollView底层的Dismiss模式视图更改中描述了类似的问题.

Spl*_*lit 5

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


Pal*_*ndo 5

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

@property (assign) CGPoint lastScrollPosition;
Run Code Online (Sandbox Code Playgroud)

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

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

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

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