在视图中locking纵向? IOS 7

所以,我想locking我的主页的方向肖像,只有主页。

我正在使用标签栏控制器,所以初始视图是标签控制器,但首先出现的视图控制器是第一个选项卡,例如主页。

我想这样做,当用户去旋转设备,它不会旋转到横向在这个页面上。 但所有其他页面都可以旋转。

我已经search了四周,没有什么似乎是特定于iOS 7,而特定于iOS 7的不起作用…

请帮忙,谢谢!

下面的图片描述了我不希望发生的事情。

在这里输入图像说明

在你的实现中实现以下内容

- (NSUInteger) supportedInterfaceOrientations { return UIInterfaceOrientationMaskPortrait; } 

这应该给你你正在寻找的结果!

使用这个代码

 @implementation UINavigationController (Rotation_IOS6) -(BOOL)shouldAutorotate { return UIInterfaceOrientationMaskPortrait; } -(NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskPortrait; } - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { return UIInterfaceOrientationPortrait; } @end 

问题是,正如你正确地指出,你的主页不是最顶层的视图控制器。

从我关于这个问题的有限知识中,我只能想到以下几点:

  1. 创build另一个选项卡视图控制器并实现控制方向的方法,即shouldAutorotatesupportedInterfaceOrientations ;
  2. 使这个控制器在启动时是第一个;
  3. 使用push segue将其他选项卡向下路由到原始选项卡控制器(支持所有方向的选项卡控制器)。

我想我find了一个很好的解决scheme。 那么,在我的情况下,我在故事板中使用UISplitViewController作为rootController,但想法是一样的。

  1. 子类你的rootController(在我的情况下,UISplitViewController)和赶上shouldAutorotate()callback,所以你可以从那里调用子视图shouldAutorotate。
  2. 在要locking旋转的视图中实现shouldAutorotate()

     class MyUISplitViewController: UISplitViewController { override func shouldAutorotate() -> Bool { if ((self.viewControllers.last) != nil && (self.viewControllers.last!.topViewController) != nil){ if (self.viewControllers.last!.topViewController!.respondsToSelector("shouldAutorotate")) { return self.viewControllers.last!.topViewController!.shouldAutorotate() } } return true } } 

在你的子UIViewController

 override func shouldAutorotate() -> Bool { if (UIDevice.currentDevice().userInterfaceIdiom == .Phone) { return false }else{ return true } } 

如果你想检查支持的方向,你可以简单地使用supportedsupportedInterfaceOrientations()

编辑:

别忘了在Storyboard root viewController中设置“MyUISplitViewController”类