【问题标题】:Dismiss modal view changes underlying UIScrollView关闭 UIScrollView 底层的模态视图更改
【发布时间】: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


【解决方案1】:
-[UITransitionView transition:fromView:toView:]

从模态转换回您的视图是完全正常的。这是动画等,如果您认为这可能会有所不同,请尝试使用动画模式。

看看你的viewWillAppearWillDisappearDidAppear... 即使是LoadUnload(如果合适),尽管不太可能在模态中没有任何内容的情况下为您的琐碎测试调用它们。 尝试在这些方法中添加一些日志记录以查看调用了哪些方法。

您是说这些方法中没有自定义代码,或者您的控制器根本没有覆盖它们?可以有所作为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 2016-09-14
    • 2011-01-02
    • 1970-01-01
    相关资源
    最近更新 更多