2014-12-04 106 views
0

我想阻止某些UIViewController的风景方向。我读了很多不同的东西来管理它,但我没有找到一个解决方案运行良好。每次,方向都不会被阻塞,即使它应该是。即使我挡住风景旋转,屏幕仍在旋转

我有以下代码以阻止在UIViewController横向方向不具有的横向旋转:

- (BOOL)shouldAutorotate { 
    return NO; 
} 

- (NSUInteger)supportedInterfaceOrientations { 
    return UIInterfaceOrientationMaskPortrait; 
} 

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { 
    return UIInterfaceOrientationPortrait; 
} 

即使是,该视图以横向旋转。

我错过了什么吗?

+0

您需要使用自定义导航控制器来阻止方向。 – 2014-12-04 10:16:02

回答

1

你有你的UIViewControllerUINavigationController?或TabBarController?在这种情况下,UIViewController只是传递的是调用UINavigationController,你将不得不继承UINavigationController和实施有这些方法,并检查其在导航控制器的堆栈的视图控制器的是,想要旋转,只允许旋转的一个你想要的那个。

这是我是如何做的一个项目:

- (NSUInteger)supportedInterfaceOrientations 
{ 
    if ([self.visibleViewController class] == [MyViewController class]) { 
     return UIInterfaceOrientationMaskAllButUpsideDown; 
    } else { 
     return UIInterfaceOrientationMaskPortrait; 
    } 
} 

你可以一试问的UIViewController从导航控制器的问题,但是这并没有为我由于某种原因,工作得很好。

- (NSUInteger)supportedInterfaceOrientations 
{ 
    return [[self.viewControllers lastObject] supportedInterfaceOrientations]; 
} 

对其他方法也使用相同的方法。

+0

正如你所说,我的ViewController是在一个自定义的NavigationController中。我尝试了你的建议,但无论如何它都会旋转。 – tbaranes 2014-12-04 10:36:46

+0

也许尝试添加shouldAutorotate {返回NO}到其他视图控制器?但我不认为这是必要的。 – Miki 2014-12-04 10:47:00

+0

也没有工作。它看起来像它只是关心方位可用,并且不要使用此方法(即使他们被称为,只是检查出来) – tbaranes 2014-12-04 10:50:59