更新:已解决。见底部修复。
在我支持所有方向的 iPad 应用程序中,如果应用程序以横向加载,就会发生奇怪的事情:
- 警报视图以纵向显示,即使其余视图为横向
- 将 iPad 从横向旋转到纵向不会触发旋转(也不会触发任何 shouldAutorotate 样式方法)。
- 将 iPad 旋转 180 度(到“其他横向”)确实会触发旋转,在此之后,iPad 的行为就像正常一样(即旋转时正确地旋转为纵向和横向)。
下面的警报视图屏幕。奇怪,奇怪。任何想法为什么会发生这种情况?只有在横向加载时才会发生这种情况——纵向加载然后旋转到横向就可以了。
解决方案:出现此问题是因为我在应用程序完成加载后(更具体地说,在应用程序的viewDidAppear:
方法中)在主视图控制器顶部添加了一个 UIViewController(模态)。
启动后, iOS 会向当前/主视图控制器发送数 (4) 次shouldAutorotateToInterfaceOrientation:
调用,以确定当前支持哪些方向。当我这么快就添加了另一个 VC 时,这发生在上述调用的中间。因此,我只接到一两个电话(对于“肖像”,因为它以肖像开头)。
然后,主视图控制器对横向方向默认支持“否”,但新添加的视图控制器(也被问及方向)现在愉快地响应“是”。
如果我删除了另一个 VC(它是横向的),我会意识到我的主视图控制器卡在纵向上。所以我有一个纵向视图,上面有一个横向视图。警报等注意了前者的方向,因此产生了上述灾难性的结果。
此外,如果我尝试旋转到纵向,我不能,因为主视图控制器已经是纵向的。旋转到横向也是不可能的,因为另一个视图控制器已经在横向。只有当我做了“风景,但另一个”旋转时,两个视图控制器都同意需要旋转,因此设备旋转了。
在我的情况下,解决方法是简单地将另一个控制器的创建稍微延迟。使用performSelector:withObject:afterDelay.
-- 0 似乎有效,但我只是把它放在 1 以确保。看起来有点奇怪,出现了主vc,然后是另一个vc,但比上面的要好。