首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dismissModalViewControllerAnimated重置contentOffset

dismissModalViewControllerAnimated重置contentOffset
EN

Stack Overflow用户
提问于 2011-09-18 16:06:57
回答 2查看 1.7K关注 0票数 7

我的表视图有问题。当关闭呈现在它上面的模式视图控制器时,它总是滚动到顶部。我尝试过使用KVO观察contentOffset的变化,但扰乱我的视图的是它背后的变化。

UITableViewController中,当用户在模式对话框中完成任务时,self.tableView.contentOffset is,我调用:

代码语言:javascript
复制
[self dismissModalViewControllerAnimated:YES]

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

这是应该发生的吗?我可以通过在呈现模式视图之前记住滚动位置来解决这个问题,并在关闭模式视图之后在viewWillAppear中恢复它。但这似乎是错的。我是不是遗漏了什么?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-21 21:32:19

看起来这是UITableViewController的默认行为。我在非常简单的应用程序中测试了它,它完全按照你所说的那样工作。如果您不喜欢它,可以使用UIViewController。

票数 5
EN

Stack Overflow用户

发布于 2011-09-24 17:06:39

下面是我解决这个问题的方法,这样表视图就可以保持原来的滚动位置。在我的UITableViewController子类中,我添加了:

代码语言:javascript
复制
@property (assign) CGPoint lastScrollPosition;

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

代码语言:javascript
复制
- (void)viewWillAppear:(BOOL)animated
{
    self.tableView.contentOffset = self.lastScrollPosition;
}

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

如果您希望您的表最初滚动到非零位置,就像我所做的那样,不要忘记在viewDidLoad中初始化lastScrollPosition

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7460252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档