launching a modal view controller to work around the orientation “lock” of tab bar and nav VCs?

一世执手 提交于 2019-12-25 18:28:27

问题


I have an iPhone app with a root view controller (VC) of UITabBarController (set to portrait orientation) with several tabs, one of which is a simple UIViewController. In that UIViewController is a single button - "Play Video", which, when clicked opens a modal view of the video (and automatically starts playing the video). The video view is a UIWebView in a UIViewController. I've been trying to get the Web View's VC to change orientation to landscape but have not had any luck.

I've looked around and understand that if you have a Tab Bar or a Nav controller, all children VCs will be the same orientation as the parent - makes sense. This is why I made the web view's VC modal, hoping this is a way around the orientation issue.

My question is: is this accurate - that using modal will not require the web view VC to be portrait and can respond to the shouldAutorotateToInterfaceOrientation method (even though I have not yet been able to get it to work)?

BTW, using iOS 6.

Thanks in advance.


回答1:


Apparently in ios6 and above, the way rotation works is different. So what you have to do is the following

  1. In your .plist support all 4 orientations.
  2. Subclass the UITabBarController (for e.g: CustomTabBarController)
  3. In the CustomTabBarController put the following lines of code

    -(NSUInteger)supportedInterfaceOrientations
    {
        return UIInterfaceOrientationMaskPortrait;
    }
    
    
    - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
    {
        return UIInterfaceOrientationPortrait;
    }
    
  4. In your app delegate or where ever you are initializing UITabBarController, replace those instances with CustomTabBarController instances.

  5. In your modal controller put the lines

    - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
     {
        return UIInterfaceOrientationLandscapeLeft;
    }
    
    -(BOOL)shouldAutorotate{
        return NO;
    
    }
    

And it should all work.

Apparently the trick, I found is that, UITabBarController will not listen to your instructions. It will support all the orientations you mention in the .plist.

There fore you have to subclass it.

I tried doing all of the above and it works fine. Do let me know and I can send you the code if you want.




回答2:


Try this. Just have portrait set in the summary screen, then in the app delegate, implement this:

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
    return UIInterfaceOrientationMaskAll;
}

In the tab bar controller (and no other rotation code):

-(BOOL)shouldAutorotate {
    return NO;
}

And finally, in the modal view controller:

-(BOOL)shouldAutorotate {
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskAll;
}


来源:https://stackoverflow.com/questions/13773335/launching-a-modal-view-controller-to-work-around-the-orientation-lock-of-tab-b

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!