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 控制器