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

Posted

技术标签:

【中文标题】ViewController 中没有导航控制器的屏幕方向【英文标题】:Screen orientation in ViewController that doesn't have a navigation controller 【发布时间】:2013-12-17 07:41:22 【问题描述】:

我有一个 ios 6 iPad 应用程序,其中大多数 ViewController 都有其导航控制器。在所有这些视图中,我希望方向只是横向,这很好用。虽然有一个视图控制器没有导航控制器 - 我只是在导航控制器的顶部视图控制器顶部打开它的视图,但它不是模态的。我确实希望用户能够在该视图控制器上更改屏幕的方向,但在其余所有视图控制器上保持横向。我就是这样做的:

导航控制器的子类:

-(NSUInteger)supportedInterfaceOrientations 
return UIInterfaceOrientationMaskLandscape;



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

以下是我想要同时拥有横向和纵向的特定视图控制器的相同方法:

- (NSUInteger)supportedInterfaceOrientations 
    return UIInterfaceOrientationMaskAll;


- (BOOL)shouldAutorotate 
    return YES;

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

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

【问题讨论】:

我认为我显示此视图的方式必须是其背后的原因,所以我的问题宁愿是这些视图是否有可能具有单独的方向配置? 【参考方案1】:

事实上,你显示这个特殊视图控制器的方式使你的视图无法改变方向,因为当设备改变方向时,它会询问你的关键窗口的 rootController 是否可以定位,在你的情况下,你返回横向所以你的窗口只支持横向模式。

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

延伸阅读:Understand ViewController Orientation

【讨论】:

【参考方案2】:
- (NSUInteger)supportedInterfaceOrientations 
return UIInterfaceOrientationMaskAll;
 

改成

- (NSUInteger)supportedInterfaceOrientations 
    return UIInterfaceOrientationMaskLandscape;


If you have more doubts 

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

【讨论】:

@jahsiotr 在您想要更改方向的视图控制器中更改此项 这不会阻止 View Controller 改变方向吗?我需要的是让用户在该 1 个特定的 View Controller 上改变方向,而不是让其他所有的 View Controller 改变方向

以上是关于ViewController 中没有导航控制器的屏幕方向的主要内容,如果未能解决你的问题,请参考以下文章

从嵌入式导航控制器推送 viewController 时的奇怪行为

来自 ViewController 的 UINavigation 控制器

在没有导航控制器的 UINavigationBar 中强制显示后退按钮

为啥模拟器中没有出现导航栏?

Segue没有显示导航栏

在导航控制器中滑动 viewController