dismissModalViewControllerAnimated重置contentOffset
我的表格视图有问题。当解除其上的模态视图控制器时,它总是滚动到顶部。我试着用KVO观察contentOffset
的变化,但是我认为弄乱了我的观点的那个变种落后了。dismissModalViewControllerAnimated重置contentOffset
从UITableViewController
,当用户完成他的任务在模态对话框,self.tableView.contentOffset
是,我称之为:
[self dismissModalViewControllerAnimated:YES]
随后,当viewWillAppear:(BOOL)animated
被调用时,self.tableView.contentOffset
已设置为0,0。
这是应该发生?我可以通过在呈现模态视图之前记住滚动位置来解决该问题,并在解除模态视图后将其恢复到viewWillAppear中。但这似乎是错误的。我错过了什么吗?
我发现在Dismiss modal view changes underlying UIScrollView中描述的类似问题。
下面是我如何解决此问题,以便表视图保持原始滚动位置。在我的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];
}
如果你希望你的表格最初出现滚动到非零的位置,我做过了,不要忘记在您的viewDidLoad
中初始化lastScrollPosition
。
感谢Palimondo的帖子。你为我解决了一个确切的问题! –
你可以检查'viewDidLoad:'在解散模态视图后被调用吗? (我注意到这可能发生在内存警告期间,即使视图被按下,一些组件也被卸载)。 –
babbidi有一个很好的观点,如果出现内存警告,您的视图可以在模态视图处于最前面时卸载。如果您在viewDidLoad方法中初始化表格视图,并且在模态视图中存在内存警告,那么当您关闭模态视图时,表格视图可能会重新初始化。把NSLogs放在viewDidUnload和viewDidLoad中。 – MattyG
我已经在监视'viewDidUnload' - 不,视图没有被卸载。 – Palimondo