iOS状态栏忽略根控制器中的supportedInterfaceOrientations

时间:2014-04-03 14:28:44

标签: ios iphone objective-c ios7 screen-orientation

我有一个应用程序需要一直处于纵向模式,除非在播放视频时。为了在我的项目设置中为VideoController启用横向模式,我已启用支持的所有方向模式。 然而,这允许我的其他控制器也旋转。为了解决这个问题,我将以下内容添加到我的根UINavigationController

- (BOOL)shouldAutorotate
{
   return YES;
}

-(NSUInteger)supportedInterfaceOrientations
{
   if([[VideoPlaybackManager sharedManager] videoIsPlaying]) {
       return UIInterfaceOrientationMaskLandscape;
   }

   return UIInterfaceOrientationMaskPortrait;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    if([[VideoPlaybackManager sharedManager] videoIsPlaying]) {
        return UIInterfaceOrientationLandscapeLeft;
    }
    return UIInterfaceOrientationPortrait;
}

现在我有两个问题:

  1. 应用程序的正常屏幕遵循限制并保持纵向。但是,无论是否破坏UI,状态栏都会更改方向。如果设备以横向模式转动,我将在面向纵向的屏幕上设置面向横向的状态栏。我该如何解决这个问题,以便状态栏保持不变?

  2. 我为视频播放时设置了首选横向。这不起作用,preferredInterfaceOrientationForPresentation似乎根本没有被调用。我做错了什么或者我错过了什么?

  3. 更新 我修正了1.将以下内容添加到我的AppDelegate

    - (NSUInteger)application:(UIApplication *)application   supportedInterfaceOrientationsForWindow:(UIWindow *)window
    {
        if([[VideoPlaybackManager sharedManager] videoIsPlaying]) {
            return UIInterfaceOrientationMaskAll;
        }
    
        return UIInterfaceOrientationMaskPortrait;
    }
    

    问题2但是仍然存在。当我开始播放视频时,它不会以横向方向开始。有什么想法吗?

    任何帮助将不胜感激! 谢谢!

1 个答案:

答案 0 :(得分:0)

AppDelegate.m中的此代码将提供帮助

- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
    UIViewController *topScreen = self.window.rootViewController;
    while (topScreen.presentedViewController) {
        topScreen = topScreen.presentedViewController;
    }
    return topScreen.supportedInterfaceOrientations;
}