模态视图的 Ipad 方向问题
Posted
技术标签:
【中文标题】模态视图的 Ipad 方向问题【英文标题】:Ipad orientation problem with modal view 【发布时间】:2010-10-01 18:15:14 【问题描述】:我遇到了模态视图旋转的问题。 我在纵向模式下创建一个主视图,然后创建一个模态视图。一切正常:我可以旋转模态视图并且支持所有方向。 如果我以纵向模式创建主视图然后以横向旋转,然后我创建我的模式视图...模式处于纵向模式,而不是应有的横向模式。
主视图和模态视图中的 shouldAutorotateToInterfaceOrientation 均返回 YES。
有什么想法吗?
【问题讨论】:
你能发布一些示例代码吗?你是如何创建和展示你的模态视图控制器的? 【参考方案1】:如果在 ios 将旋转事件排队之后,但在处理旋转事件之前呈现视图控制器,则可能会发生这种情况。从观察来看,我认为旋转事件特定于当前呈现的视图控制器。
这是一种有用的思考方式:
-
iOS 将旋转事件排队等待顶视图控制器 A。
您的代码提供了一个视图控制器 B。
rotate 事件已出队,但它只针对视图控制器 A。
谢天谢地,有一个非常简单的解决方法。只需假设事件队列中有一个旋转事件,并确保您的视图实际上是在之后呈现的。您可以通过对新视图控制器的呈现进行排队,而不是直接呈现它来做到这一点。排队到主队列的块将在之后任何已排队的事件(如旋转事件)但在用户有机会与您的 UI 交互之前执行。
变化:
[self performSegueWithIdentifier: @"firstRun" sender: self];
收件人:
dispatch_async(dispatch_get_main_queue(), ^
[self performSegueWithIdentifier: @"firstRun" sender: self];
);
执行此操作后,您会得到以下行为:
-
iOS 将旋转事件排队等待顶视图控制器 A。
您的代码安排将呈现新视图控制器的块。
rotate 事件已出队,但它只针对视图控制器 A。
新的视图控制器 B 由您的块呈现。它获得了新的方向。
【讨论】:
【参考方案2】:我遇到了同样的问题。我终于通过从我的主视图控制器(而不是从其中一个子视图的视图控制器)显示模态视图来解决它。
【讨论】:
没有太多代码可以分享,都是关于你调用 PresentModalViewController 的视图控制器。【参考方案3】:遇到了同样的问题,最终修复了将模态延迟一秒钟,因此“父”视图控制器可以获得正确的方向。
[self performSelector:@selector(presentLogin) withObject:nil afterDelay:1.0]
presentLogin 看起来像:
- (void) presentLogin
LoginVC *loginVC = [[LoginVC alloc] init];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:loginViewController];
nav.modalPresentationStyle =UIModalPresentationFormSheet;
[self presentViewController:nav animated:YES completion:NULL];
【讨论】:
以上是关于模态视图的 Ipad 方向问题的主要内容,如果未能解决你的问题,请参考以下文章
当模态视图可见且 iPad 旋转时,UIPopover 的内容会更改为随机方向