How to maintain presenting view controller's orientation when dismissing modal view controller?

前端 未结 9 2051
礼貌的吻别
礼貌的吻别 2020-11-30 03:57

I have this app I am working on and I need ALL my view controllers but one to be in portrait. The single one view controller that is special I need it to be able to rotate t

相关标签:
9条回答
  • 2020-11-30 04:36

    This is actually easier and can be done without any additional properties (here's an example with AVPlayerViewController):

    - (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
    {
        if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
            if ([self.window.rootViewController.presentedViewController isKindOfClass: [AVPlayerViewController class]])
                return self.window.rootViewController.presentedViewController.isBeingDismissed ? 
                UIInterfaceOrientationMaskPortrait : UIInterfaceOrientationMaskAll;
            else
                return UIInterfaceOrientationMaskPortrait;
        } else {
            return UIInterfaceOrientationMaskAll;
        }
    }
    
    0 讨论(0)
  • 2020-11-30 04:38

    In the root view controller, try adding:

    - (NSUInteger)supportedInterfaceOrientations
    {
        return UIInterfaceOrientationMaskPortrait;
    }
    

    Worked for me.

    0 讨论(0)
  • 2020-11-30 04:45

    After much experimentation, I am convinced that this is a "feature" of iOS 8.

    If you think about it, this makes perfect sense, because it has been coming for a long time.

    • In, say iOS 4, it was possible to force app rotation when changing view controllers in a tab bar controller and a navigation controller, as well as when presenting/dismissing a controller.

    • Then in iOS 6 it became impossible to force app rotation except when presenting/dismissing a view controller (as I explained in many answers, such as this one).

    • Now, in iOS 8, I conjecture that it will be impossible to force app rotation at all (except at launch). It can prefer a certain orientation, so that once it is in that orientation it will stay there, but it cannot force the app to go into that orientation.

      Instead, your view controller is expected to "adapt". There are several WWDC 2014 videos concentrating on "adaptation", and now I'm starting to understand that this is one reason why this is so important.

      EDIT: In seed 4, it looks like this feature (forcing rotation on presentation and dismissal) is returning!

    0 讨论(0)
提交回复
热议问题