要编排自动旋转,应用程序的窗口会查找由视图控制器管理的最顶层子视图。窗口在该视图控制器上调用shouldAutorotateToInterfaceOrientation:
,并按照指示转换视图控制器的视图。
这就是为什么基于窗口的应用程序不能自动旋转开箱即用的原因。默认的模板不带有已经为您设置的视图控制器。要利用自动旋转,您必须创建一个自定义UIViewController
子类,根据需要编辑它的shouldAutorotateToInterfaceOrientation:
方法,并将该视图控制器的视图添加为窗口的直接子视图(或将视图控制器添加到容器中,例如UINavigationController
,并添加容器视图控制器的视图作为窗口的子视图)。这通常在application:didFinishLaunchingWithOptions:
中完成。
您声明“当我添加视图控制器和/或UINavigationController到基本窗口时,它们也不会旋转”,并且您已实现shouldAutorotateToInterfaceOrientation:
,并且它仍然不会旋转。如果你已经正确配置了一切,这应该工作。你可能在这个过程中犯了一些小错误,但我不能确定没有看到你的项目是什么。这里有一些事情要检查:
如果你已经在NIB定义您的自定义视图控制器,请务必记得要改变身份督察IB类名称。
确保您将视图控制器的视图直接添加到窗口,并且没有其他视图充当窗口和视图控制器视图之间的包装。
确保你没有试图在IB中添加任何子视图到你的窗口对象。您应该在application:didFinishLaunchingWithOptions:
中添加其子视图。
如果您在NIB中定义了自定义视图控制器,请确保其视图嵌套在IB中的视图控制器下。即不要尝试将一些其他视图连接到视图控制器的插座。
那些是在黑暗中的一些镜头。希望这个答案中的内容能帮助你找到你的错误。如果没有,请尝试创建一个基于视图的应用程序,并将其默认配置与基于窗口的应用程序进行比较。也许那么你的错误会跳出你的身上。
您是否记得在目标中设置所有旋转都被支持? – msgambel
您的设备是否旋转锁定? – Raptor
你的意思是你实现了'shouldAutorotateToInterfaceOrientation:'到你的视图控制器,而不是你的视图,对吧? – cduhn