即使被告知不要,iOS6方向仍在旋转
我似乎有我的iOS应用程序的困难。
它的部署目标是iOS5.0,但是我正在使用iOS 6.0 SDK。
在我的视图控制器中,我有:
-(NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskPortrait; } - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { return UIInterfaceOrientationMaskPortrait; } -(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { return (toInterfaceOrientation == UIInterfaceOrientationPortrait); }
这在iOS5模拟器中运行时工作正常。 该视图不会旋转到LandScape或颠倒。
但是,在IOS6模拟器(和设备上),它将继续旋转。
我已经使用NSLog
来检查-supportedInterfaceOrientations
是否被调用,它有两次,但它仍然旋转到LandScape(右或左)
我究竟做错了什么?
我还扩展了UINavigationController
(我的根视图控制器)来包含这个:
@implementation UINavigationController (Rotation_IOS6) -(BOOL)shouldAutorotate { return [[self.viewControllers lastObject] shouldAutorotate]; } -(NSUInteger)supportedInterfaceOrientations { return [[self.viewControllers lastObject] supportedInterfaceOrientations]; } - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation]; } @end
但仍然没有成功。
谢谢。
编辑
按照马特的回答。 我也需要扩展UITabBarController类似的实现我的UINavigationController和工作。
希望这可以帮助别人。
问题可能是你有一个导航界面。 你做? 如果是这样,您需要inheritanceUINavigationController并使用该子类的实例作为导航控制器。 在那个子类中, 这是实现supportedInterfaceOrientations
。 对于任何父视图控制器也是如此(例如UITabBarController)。
原因在于iOS 6的旋转思维方式与iOS 5 完全不同。你认为从iOS 5知道的东西没有什么用处。 在iOS 6中,我们从应用程序本身的层面开始,通过应用程序代理的方式向根视图控制器或其他全屏视图控制器(例如一个呈现的视图控制器) 停止工作 。 父母不再咨询子女。
此外,应用程序本身(通过info.plist或应用程序委托)必须列出应用程序的任何部分都可以假定的每个方向; 视图控制器只能要求这些的一个子集 。
请参阅发行说明:
http://developer.apple.com/library/ios/#releasenotes/General/RN-iOSSDK-6_0/_index.html
但是请注意,这句话是谎言:
为了兼容性,仍然实现shouldAutorotateToInterfaceOrientation:方法的视图控制器不会获得新的自动旋转行为
相反,在iOS 6中,较老的自动旋转方法被完全忽略; 每个人都获得新的自转行为。 它不是“选入”。
如果你不想让应用程序旋转,你可以从你的info.plist中支持的界面方向中删除横向,应该这样做。
否则,你需要告诉你的根视图控制器寻找它的孩子的方向信息。
布兰登
检查你的项目设置和info.plist它们比应用程序代表具有更高的优先级。 确保只有你想要的方向被选中