iOS Screen Resolution bug when start in landscape

I can’t identify why this started happening, and I hope it’s just some configuration I’ve miss looked.

So, the first time I poll Screen.width or height right after I start the app from zero, it will bring values as if it’s in portrait mode, no matter if I’m in landscape. So, if I start it in portrait it’s all right, but if I start it in landscape, I have to turn around twice to fix the initial issue, and get the right “Screen.width x height”.

Using newest Unity 4, iOS Player Settings is, of course, set to Auto Rotation. I don’t force resolution or orientation anywhere in the code. And this seems like a very similar issue.

Also I get no such problems on editor or android, using the very same project.

I was trying to solve this since yesterday… Today I got more lucky on finding a solution, much faster! :slight_smile:

It’s a bug on Screen. It won’t properly identify the device orientation, for some reason. But Input.deviceOrientation will. And so we can use it to fix the issue, forcing it into Screen.orientation. Like this:

	static private void FixFuckingWrongInitialScreenOrientation () {
		if ( (Screen.height > Screen.width && Input.deviceOrientation.ToString().ToLower().StartsWith("landscape"))
			|| (Screen.width > Screen.height && Input.deviceOrientation.ToString().ToLower().StartsWith("portrait"))
		) {
			Debug.LogWarning("Fixing wrong screen orientation ("+ Screen.orientation +") to right device orientation: "+ Input.deviceOrientation);
			switch (Input.deviceOrientation) {
			case DeviceOrientation.LandscapeLeft:
				Screen.orientation = ScreenOrientation.LandscapeLeft;
				break;
			case DeviceOrientation.LandscapeRight:
				Screen.orientation = ScreenOrientation.LandscapeRight;
				break;
			case DeviceOrientation.PortraitUpsideDown:
				Screen.orientation = Scre    enOrientation.PortraitUpsideDown;
				break;
			case DeviceOrientation.Portrait:
				Screen.orientation = ScreenOrientation.Portrait;
				break;
			}
		}
	}

Keep in mind this will remove the auto screen orientation, if it was set before. So this should either be used on Update as a replacement for the automatic native unity function or, if used on Start, you should set orientation back to auto on the second screen change! Quite complicated patch, huh?