关闭模态视图会影响底层的UIScrollView。

9

这里我可能缺少了一些基础知识。我打开了一个UIScrollView,它由一个自定义的UIScrollViewController(称为DataController)控制。在某个时刻,需要用户输入,因此我从DataController打开一个模态UIViewController:

ElementSelectController *viewController = [[ElementSelectController alloc] initWithNibName:@"ElementSelectController" bundle:nil];
viewController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
viewController.theDelegate = self;
[self presentModalViewController:viewController animated:YES];

用户准备好模态视图后,它将再次被关闭。这也会从DataController中发生:

[self dismissModalViewControllerAnimated:YES];

这一切都运行得很好。 但是当模态视图消失时,底部的UIScrollView被调整为全屏,并滚动到位置(0,0)。即使是一个简单的模态视图,只需要被关闭即可。 显然,我希望UIScrollView保持与显示模态视图之前相同的状态和大小。 你有什么想法吗? 我检查了当设置UIScrollView帧时的堆栈跟踪(通过自定义UIScrollView的setFrame:中断点),它似乎是从以下位置调用的:
-[UITransitionView transition:fromView:toView:]

通过dismissModalViewControllerAnimated调用的方法叫做via。

我不知道为什么会发生这种情况,但您可以始终存储UIScrollView的contentOffset,并在模态视图消失后重置它。 - NWCoder
请在viewWillAppear中展示一些你的代码。 - Baby Groot
谢谢。这是我现在的解决方法。我保存UIScrollView的帧和contentOffset,并在dismiss调用后立即重置它们。这似乎有效,但感觉像是一个hack。我很想知道正常处理这个问题的方法是什么。 - fishinear
@Smriti Yadav 我在viewWillAppear中没有自定义代码,也没有在DataController或模态视图中添加任何自定义代码。目前,模态视图只是一个带有导航栏和取消按钮的UIView,是在Interface Builder中构建的。那里完全没有自定义代码。 - fishinear
1个回答

1
-[UITransitionView transition:fromView:toView:]

从模态返回到您的视图是完全正常的。这是动画等方面的问题,如果您认为这可能会有所不同,请尝试使用带有动画的模态。

查看您的viewWillAppearWillDisappearDidAppear...甚至LoadUnload(如果适用),虽然在没有模态中的任何内容的简单测试中不太可能调用它们。尝试在这些方法中放置一些日志以查看哪个被调用。

此外,您是否表示这些方法中没有自定义代码,或者您的控制器根本没有覆盖它们?这可能会有所不同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接