如果不可见,则不会调用willRotateToInterfaceOrientation

时间:2014-05-06 16:36:34

标签: ios uinavigationcontroller uitabbarcontroller uiinterfaceorientation orientation-changes

我有以下结构(iOS 7应用程序):

UIWindow - > UITabBarController - > 2个标签
标签1:NavigationControllerHomeViewController为根。
标签2:NavigationControllerOtherViewController为根。

如果我在Tab1中旋转iPad,HomeViewController会毫无问题地执行WillRotateToInterfaceOrientation:。但是,如果我在Tab2中并旋转iPad,则Tab1中willRotate:的{​​{1}}方法无法执行,因此当我返回到Tab1时,视图的布局为在错误的方向和混乱。

发生了什么?提前感谢您的知识。

1 个答案:

答案 0 :(得分:3)

这是iOS上的预期行为,因为在设备旋转时未显示HomeViewController

签出Apple documentation以支持多视图控制器界面方向。

具体来说,隐藏视图控制器时旋转可能会发生,其中包含:

  

如果在发生旋转时视图控制器的内容不在屏幕上,则它不会看到旋转消息列表。例如,请考虑以下事件序列:

     

您的视图控制器全屏显示另一个视图控制器的内容。   用户旋转设备以使用户界面方向改变。   您的应用程序会解除显示的视图控制器。   在此示例中,当旋转发生时,呈现视图控制器不可见,因此它不会接收任何旋转事件。相反,当它再次出现时,其视图只需调整大小并使用普通视图布局过程定位。如果您的布局代码需要知道设备的当前方向,它可以读取应用程序对象的statusBarOrientation属性以确定当前方向。

所以基本上你必须准备你的视图控制器,以根据在没有收听通知时可能发生的轮换来更新自己。

最常见的方法是在viewWillAppear:上放置特定于接口的代码,因为每次在屏幕上显示视图控制器时都会调用此方法。