在视图中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
问题是,正如你正确地指出,你的主页不是最顶层的视图控制器。
从我关于这个问题的有限知识中,我只能想到以下几点:
- 创build另一个选项卡视图控制器并实现控制方向的方法,即
shouldAutorotate
和supportedInterfaceOrientations
; - 使这个控制器在启动时是第一个;
- 使用push segue将其他选项卡向下路由到原始选项卡控制器(支持所有方向的选项卡控制器)。
我想我find了一个很好的解决scheme。 那么,在我的情况下,我在故事板中使用UISplitViewController作为rootController,但想法是一样的。
- 子类你的rootController(在我的情况下,UISplitViewController)和赶上shouldAutorotate()callback,所以你可以从那里调用子视图shouldAutorotate。
-
在要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”类