Ios 在非';看不见?

Ios 在非';看不见?,ios,objective-c,uiviewcontroller,rotation,screen-rotation,Ios,Objective C,Uiviewcontroller,Rotation,Screen Rotation,我环顾了一下堆栈溢出,没有找到任何解决我的确切问题的方法。我正在开发一个应用程序,它使用自定义选项卡视图在4个不同的导航控制器之间切换。我面临的问题是,当旋转设备,然后切换到其他选项卡时,可见的视图控制器仍然按照旧的方向进行布局。我一直在使用willRotateToInterfaceOrientation:duration:来执行我想要的任何特定于方向的准备工作,使用新方向时,它在VC可见时按预期工作,但我知道,对于在旋转时不可见的视图控制器,不会调用旋转方法 苹果的文件说: 隐藏视图控制器时可

我环顾了一下堆栈溢出,没有找到任何解决我的确切问题的方法。我正在开发一个应用程序,它使用自定义选项卡视图在4个不同的导航控制器之间切换。我面临的问题是,当旋转设备,然后切换到其他选项卡时,可见的视图控制器仍然按照旧的方向进行布局。我一直在使用
willRotateToInterfaceOrientation:duration:
来执行我想要的任何特定于方向的准备工作,使用新方向时,它在VC可见时按预期工作,但我知道,对于在旋转时不可见的视图控制器,不会调用旋转方法

苹果的文件说:

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

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

    我想出了一些办法来解决这个问题,但我不确定什么是最好的。他们各有利弊。我目前的解决方案基本上是复制我在
    willrotatetointerfaceoorientation:duration:
    中所做的任何操作,在
    viewwillbeen
    中,这样在发生旋转时不可见的视图控制器可以在新方向变为可见之前对其进行调整。我的另一个想法是将方向代码从
    willrotatetointerfaceooritation:duration:
    移动到
    viewWillLayoutSubviews
    中,当视图控制器在可见时旋转时调用该代码,当视图控制器在未旋转时变为可见时调用该代码。这样做的问题是,即使没有发生旋转,也可以非常频繁地调用布局方法。还有一个选择是为
    UIDeviceOrientationIDChangeNotification
    注册我的视图控制器,我想我的VCs将收到该通知,无论它们是否可见,尽管我还没有测试过

    我想这是一个相当普遍的问题,我想知道——其他人的解决方案是什么?有没有比我想出的解决方案更好的办法


    谢谢

    是的,在UIDeviceOrientationIDChangeNotification上添加一个观测者应该可以帮助您实现这一目标

    我直到现在才看到您的响应。谢谢你的投入,这就是我最终做事的方式。