在 iOS 5 中,我的应用程序使用该方法更改了我的方向:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}
在 iOS 6 中,我想我应该这样做,但它什么都不做!我的应用程序不是按照我想要的方式旋转。
- (BOOL) shouldAutorotate
{
return YES;
}
-(NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskLandscapeRight;
}
答案 0 :(得分:28)
这就是我添加viewController
的方式。
我替换了这行代码:
[window addSubview:viewController.view];
这一行:
[window setRootViewController:viewController];
答案 1 :(得分:15)
当设备更改方向时,在iOS 6中,系统会询问应用程序支持的方向。应用程序将返回它接受的多个方向。
应用程序如何确定其方向?
-(NSUInteger)application:supportedInterfaceOrientationsForWindow:
方法指定。这有效地覆盖了info.plist设置,这个实现是可选的。默认情况下,iPad应用程序可以向各个方向定位,而iPhone则可以完全颠倒。UINavigationController
或UIViewController
...等,然后它指定如何呈现以及是否要自动旋转。这些UIViewControllers
可以使用shouldAutorotate:
和supportedInterfaceOrientations
方法告诉应用代理如何呈现它。您必须确保设置窗口的根视图控制器。
此外,如果您要以全屏显示任何其他视图控制器,例如模态视图控制器,则负责确定方向更改。
答案 2 :(得分:2)
对我而言,解决方案有效,案例有所不同,因为我有一个UINavigationController
。
我的情况是我需要除了一个以外的所有肖像窗口。我必须在目标中启用所有横向和纵向方向(否则它会在唯一的横向视图中崩溃)。
所以在这种情况下:
UINavigationController
创建一个子类,UINavigationController
。答案 3 :(得分:1)
如果您正在使用UINavigationController,它会将supportedInterfaceOrientations:
消息发送到UINavigationController本身而不是最顶层的视图控制器(即您实际想要它做什么)。
您可以简单add a category to UINavigationController,而不必使用UINavigationController的子类来修复它。
答案 4 :(得分:0)
我在我的单例中创建了一个新变量:canRotate
,当我希望viewcontroller支持某个方向时,我将其设置为YES。
在appDelegate中我添加了这个:
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
if([[SharedData sharedInstance] canRotate])
{
return (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight);
}
return UIInterfaceOrientationMaskPortrait;
}
在我的情况下它有效。我有一个自定义tabbar和UINavigationviewControllers作为子视图添加到rootViewController。
答案 5 :(得分:0)
我知道这听起来非常简单,但是在我的iPhone上进行测试的过程中,我的大脑一直在弄清楚方向问题 - 我在纵向模式下进行了物理自动锁定模式 - 所以我没有改变编程方式 - 认为这应该是故障排除第1步!