This problem appears to be intermittent, but I am not sure why exactly. When running my application on the device (iPad), I have some code to load a scroll view with some image views according to the current device orientation. Even though the device is landscape before loading, the views are being loaded as if it were portrait.
The orientation is found by calling [[UIApplication sharedApplication] statusBarOrientation]
.
The views are set up to adjust their positions when the device is rotated, and indeed, rotating to portrait and then back to landscape returns them to the correct landscape positions. Is it the case that all applications start off in portrait and soon change to landscape if required? Am I trying to check the orientation too soon (during the init
of the first view controller to be loaded)?
Did you make sure you have all these in info.plist ?
If you are having this issue at launch time, you need to use UIDevice to get the device orientation, since statusBarOrientation will always be portrait until after application:didFinishLaunchingWithOptions:. The only caveat is that you need to enable device orientation notifications prior or asking UIDevice for the orientation.
OK Fixed.
Using UINavigationController, when I popToViewController:animated: from a landscape view to a portrait view, the destination view appears correct but the status bar and also the UIKeyboard keeps the landscape configuration, making a real mess.
Working around After thousands of recommendations about statusBarOrientation and references read... https://developer.apple.com/library/content/releasenotes/General/RN-iOSSDK-6_0/index.html
statusBarOrientation only works if supportedInterfaceOrientations returns 0, so... that give us a guess.
If statusBarOrientation is not as expected, one zero return will do it (if always return 0, the view wont rotate, so:
Now, in viewDidAppear (believe me, I use this call even when the keyboard notification is recived:
more than 48 labor hrs in this. Hope this helps a while, thanks to all.
If you're subclassing UIWindow or the status bar you'll see this because that's the ipad device's native orientation. The UIWindow translates the orientation and coordinates into what we're used to. After you makeAndKeyVisible, your device and interface orientation in view controllers should be as expected. You wouldn't by chance be using MTStatusBarOverlay would you? I went through the same thing and it came down to the order of instatiation.
Just in case somebody else runs into this, I see a lot of apps that have similar issues in iOS5, actually on iPhone.
It might be a bug in iOS 5 or just an interference with a common behavior...
I use a custom root view controller class (a UITabBarController subclass, no idea whether that matters) and in that class I've overridden "shouldAutorotateToInterfaceOrientation" to only start rotating after my initial screen setup is done (doing otherwise messed some things up).
What I do now is I re-use this class to also set the statusBarOrientation manually to portrait before I allow rotations and to whatever the UI rotates to afterwards.
I believe this could fix THIS issue, too, even if the cause might be unrelated.