shouldAutorotateToInterfaceOrientation不起作用

我一直在肖像模式下写我的通用应用程序,现在约15笔尖文件,许多viewCotnrollers,我想实现shouldAutorotateToInterfaceOrientation并devise一些屏幕在横向模式。

join:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return YES; } 

到我的所有viewControllers,不做的工作。

在debugging期间,我看到这个方法被调用,但它不会工作! 不在模拟器中,不在设备中,不在Iphone中,不在Ipad中!

我在论坛中search了一些答案,并看到一些build议使用:

 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown ); } 

也没有工作,

添加:

  [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 

  [[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications]; 

到我的viewDidLoad和viewDidUnload分别没有任何工作。

我迷路了..任何帮助都行!

只是一个更多的信息.​​..所有我的意见是typesUIControl,因为我需要TuchUpInside工作。

Appriciate你的帮助。

确保你所有的父视图都有autoresizesSubviews = YES。 如果您没有在IB中为所有视图设置弹簧和支撑,则可能需要在代码中执行此操作。

引用Interface Builder用户指南:

重要提示:在Cocoa nib文件中,如果您在Interface Builder中没有为您的视图设置任何弹簧或支柱,但是在运行时使用setAutoresizingMask:方法添加自动调整行为,您的视图可能仍然不会显示正确的自动调整行为。 原因是如果这些孩子没有设置弹簧和支柱,界面生成器会禁用父视图的子项的自动调整。 要再次启用自动调整行为,您必须将YES传递给父视图的setAutoresizesSubviews:方法。 这样做后,子视图应该正确自动大小。

其他一些事情要注意:

  1. 如果UINavigationController的根视图控制器也设置为自动旋转,则它只会自动旋转。

  2. 如果所有视图控制器都设置为自动旋转,UITabBarController将只会自动旋转。

 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { UIInterfaceOrientation des=self.interfaceOrientation; if(UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad) //iPad { if(des==UIInterfaceOrientationPortrait||des==UIInterfaceOrientationPortraitUpsideDown)//ipad-portairait { } else//ipad -landscape { } } else//iphone { UIInterfaceOrientation des=self.interfaceOrientation; if(des==UIInterfaceOrientationPortrait||des==UIInterfaceOrientationPortraitUpsideDown) //iphone portrait { } else //iphone -landscape { } } return YES; } 

你在为哪个iOSbuild设? 它在iOS 6.0中已被弃用。 (您应该重写supportedInterfaceOrientations和preferredInterfaceOrientationForPresentation方法。)

你也可以在UIViewController类上调用shouldAutorotate:

https://developer.apple.com/library/ios/documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instm/UIViewController/shouldAutorotate


确保您已经在项目设置的“Summery”选项卡中检查了支持的界面方向(在顶部的“Project Navigator”中select项目名称)。

如果你没有select你想在这里使用的方向,那么模拟器/ iPhone将不允许屏幕改变方向。

我有这个问题,但它在iOS6,但不是iOS5。 原来,我在故事板中有一个视图,我还没有创build视图控制器类。

…最后但并非最不重要,确保你没有激活设置“肖像取向locking”在你的testing设备(当然不适用于模拟器),这将禁止在任何应用程序旋转shouldAutorotateToInterfaceOrientation回报。