我有以下结构(iOS 7应用程序):
UIWindow
- > UITabBarController
- > 2个标签
标签1:NavigationController
以HomeViewController
为根。
标签2:NavigationController
以OtherViewController
为根。
如果我在Tab1中旋转iPad,HomeViewController
会毫无问题地执行WillRotateToInterfaceOrientation:
。但是,如果我在Tab2中并旋转iPad,则Tab1中willRotate:
的{{1}}方法无法执行,因此当我返回到Tab1时,视图的布局为在错误的方向和混乱。
发生了什么?提前感谢您的知识。
答案 0 :(得分:3)
这是iOS上的预期行为,因为在设备旋转时未显示HomeViewController
。
签出Apple documentation以支持多视图控制器界面方向。
具体来说,隐藏视图控制器时旋转可能会发生,其中包含:
如果在发生旋转时视图控制器的内容不在屏幕上,则它不会看到旋转消息列表。例如,请考虑以下事件序列:
您的视图控制器全屏显示另一个视图控制器的内容。 用户旋转设备以使用户界面方向改变。 您的应用程序会解除显示的视图控制器。 在此示例中,当旋转发生时,呈现视图控制器不可见,因此它不会接收任何旋转事件。相反,当它再次出现时,其视图只需调整大小并使用普通视图布局过程定位。如果您的布局代码需要知道设备的当前方向,它可以读取应用程序对象的statusBarOrientation属性以确定当前方向。
所以基本上你必须准备你的视图控制器,以根据在没有收听通知时可能发生的轮换来更新自己。
最常见的方法是在viewWillAppear:
上放置特定于接口的代码,因为每次在屏幕上显示视图控制器时都会调用此方法。