【问题标题】:Screen orientation in ViewController that doesn't have a navigation controllerViewController 中没有导航控制器的屏幕方向
【发布时间】: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];

【问题讨论】:

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

标签: objective-c ipad ios6 uiviewcontroller uiinterfaceorientation


【解决方案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 改变方向
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    相关资源
    最近更新 更多