【发布时间】:2011-11-02 09:04:46
【问题描述】:
这里一定有一些我缺少的基本内容。我打开了一个 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调用调用。
【问题讨论】:
-
我不知道为什么会这样,但你可以随时存储 UIScrollView contentOffset 并在模式消失后重置。
-
请从 viewwillappear 中显示您的一些代码...
-
谢谢。这就是我现在做的解决方法。我保存 UIScrollView 的框架和 contentOffset,并在关闭调用后立即重置它们。这似乎有效,但感觉就像一个黑客。我很想知道处理这种情况的正常方法是什么。
-
@Smriti Yadav 我在 viewWillAppear、DataController 和模态视图中都没有自定义代码。模型视图现在只是一个带有导航栏和取消按钮的 UIView,内置在 Interface Builder 中。那里根本没有自定义代码。
标签: iphone ios uiscrollview modal-dialog