iOS 6 - (BOOL)shouldAutorotate not getting called for navigation controllers pushed viewControllers

后端 未结 5 785
爱一瞬间的悲伤
爱一瞬间的悲伤 2021-02-09 07:31

For my app rootViewController is navgationController.

I found that pushed controller\'s

-(BOOL)shouldAutorotate is not

相关标签:
5条回答
  • 2021-02-09 08:12

    I had the same issue. check this answer its a great approauch rather than applying ShouldAutoRotate

    0 讨论(0)
  • 2021-02-09 08:12

    I also faced the same issue with the navigation controller. It works fine in the case of all the pushed view controllers, but my scenario was quite different I had one viewcontroller pushed in to the navigation controller (ViewControllerParent) as the root,

    NavController
                -- rootViewController (ViewControllerParent)
                                              --- ViewControllerChild1
                                              --- ViewControllerChild2
    

    Due to some project requirement, I was keeping the ViewControllerParent as base, and then I was adding Child viewcontroller's view as subviews to the parent based on user actions. Now I had a scenario where I wanted Child1 not to rotate and Child2 to have rotation.

    The problem I faced was that my [self.topViewController] in the Navigation controller class always returns me the Parent Object since I am not pushing the Childs into the nav stack. So my shouldAutorotate methods in my Childs will never be called. So I had to put a class check in the shouldAutorotate method of my parent and then return the rotation value. I did something like this in parent class (ViewControllerParent),it is a kind of workaround but it fixed the issue

    -(BOOL)shouldAutorotate
    {
      BOOL allowRotation = YES;
    
       if ([currentlyLoadedChild isKindOfClass:[Child1 class]])
       {
           allowRotation = NO;
       }
       if ([currentlyLoadedChild isKindOfClass:[Child2 class]])
       {
           allowRotation = YES;
       }
       return allowRotation;
    } 
    

    -anoop

    0 讨论(0)
  • 2021-02-09 08:25

    You can check for the interface orientation via

    [UIApplication sharedApplication].statusBarOrientation
    

    when the view controller is loaded, say, in viewWillAppear. There you can do your layout of subviews. Once the view is up, shouldAutorotate will be called whenever the device is turned.

    0 讨论(0)
  • 2021-02-09 08:26

    You can check the following link, you need to create custom navigation to support should auto rotate

    http://mobileappdevpage.blogspot.in/2012/11/how-to-use-should-autorotateios-6-with.html

    The other way you can do this by creating category of UINaviagationController

    code for .h file is

    @interface UINavigationController (autorotation)
    
    -(BOOL)shouldAutorotate;
    -(NSUInteger)supportedInterfaceOrientations;
    

    and code for .m file is

    @implementation UINavigationController (autorotation)
    
    -(BOOL)shouldAutorotate
    {
    
        UIInterfaceOrientation interfaceOrientation = [UIApplication sharedApplication].statusBarOrientation;
        [self.topViewController shouldAutorotate];
        return YES;
    
    }
    
    -(NSUInteger)supportedInterfaceOrientations
    {
        return UIInterfaceOrientationMaskAll;
    
    }
    @end
    
    0 讨论(0)
  • 2021-02-09 08:27

    Overriding UINavigationController is the right approach, but I'm not sure if you're checking the push controllers supportedInterfaceOrientations the correct way.

    Look at my answer here: https://stackoverflow.com/a/12669343/253008

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