In iOS 8, I have strange behavior regarding the navigation bar and orientation changes.
I have a navigation controller that reports on the supported orientation of the UIInterfaceOrientationMaskLandscapeRight interface. The navigation bar has the expected height for landscape orientation (unfortunately, I have no right to post screenshots).
Then I start a modal view of the view controller, which only supports UIInterfaceOrientationMaskPortrait . When the presentation animation starts, it seems that the metrics of the main navigation controller are changed to portrait presentation, since the height of the navigation panel increases to the size of its portrait, as shown above.
iOS 7 does not exhibit this behavior. What am I missing? I want to restore the old behavior.
Here is the complete code for a simple example above:
@implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; DOGButtonViewController *root = [DOGButtonViewController new]; DOGOrientedNavigationController *navi = [[DOGOrientedNavigationController alloc] initWithRootViewController:root]; navi.allowedInterfaceOrientations = UIInterfaceOrientationMaskLandscapeRight; self.window.rootViewController = navi; [self.window makeKeyAndVisible]; return YES; } - (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window { return UIInterfaceOrientationMaskLandscapeRight | UIInterfaceOrientationMaskPortrait; } @end @implementation DOGOrientedNavigationController - (NSUInteger)supportedInterfaceOrientations { return self.allowedInterfaceOrientations; } @end @implementation DOGButtonViewController - (void)viewDidLoad { [super viewDidLoad]; self.title = @"Button View Controller"; } - (BOOL)prefersStatusBarHidden { return YES; } - (IBAction)buttonClicked:(id)sender { DOGPortraitViewController *vc = [DOGPortraitViewController new]; [self presentViewController:vc animated:YES completion:nil]; } @end @implementation DOGPortraitViewController - (void)viewDidLoad { [super viewDidLoad]; self.title = @"Portrait Title"; } - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskPortrait; } - (IBAction)buttonClicked:(id)sender { [self.presentingViewController dismissViewControllerAnimated:YES completion:nil]; } - (BOOL)prefersStatusBarHidden { return YES; } @end
In a more complex setup, I also experience the text in the UIWebView contained in the navigation controller, which scales when the portrait is modal. If the modality is rejected, the text does not change to its original size.
uiviewcontroller ios8 uinavigationcontroller presentviewcontroller
thewulf
source share