ViewController中没有导航控制器的屏幕方向

时间:2013-12-17 07:41:23

标签: objective-c ipad ios6 uiviewcontroller uiinterfaceorientation

我有一个iOS 6 iPad应用程序,大多数ViewControllers都有自己的导航控制器。在所有这些视图中,我希望方向只是横向,它可以正常工作。有一个View Controller虽然没有导航控制器 - 我只是在导航控制器顶部的View Controller上打开它的视图,但它不是一个模态。我确实希望用户能够在该视图控制器上更改屏幕方向,但要保持其他所有方面的风景。这就是我的工作:

导航控制器的子类:

-(NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskLandscape;

}

-(BOOL)shouldAutorotate {
    return UIInterfaceOrientationIsLandscape(self.interfaceOrientation);
}

以下是我希望同时具有横向和纵向的特定View Controller的相同方法:

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskAll;
}

- (BOOL)shouldAutorotate {
    return YES;
}

由于此View Controller没有导航控制器,我确信这可以解决问题。但由于某种原因,我仍然无法在此View Controller中翻转屏幕。这是我展示View Controller的方式 - 也许这就是背后的原因:

UIWindow *window = [[UIApplication sharedApplication].windows objectAtIndex:0];
[[window.subviews objectAtIndex:0] addSubview:previewView];

2 个答案:

答案 0 :(得分:0)

- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskAll;
 }

将此更改为

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscape;
}

If you have more doubts 

参考这个 How can I display one UIView in landscape?

答案 1 :(得分:0)

实际上,您显示此特殊视图控制器的方式会使您的视图无法更改方向,因为当设备更改方向时,它会询问您的键窗口的rootController是否可以定向,并且在您的情况下,您将返回景观您的窗口仅支持横向模式。

所以也许你应该在没有动画的情况下从你的navigationController中呈现它。而不是在您的特殊视图控制器中实现- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation

进一步阅读:Understand ViewController Orientation