Duck
Duck

Reputation: 35933

Width of viewController is 320px when iPhone is landscape

I have a viewController and I have

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return YES;
}

why I read w and h as 320 and 480 on its viewDidLoad for width and height, instead of 480 and 320, respectively, when iPhone is landscape? (see below)

- (void) viewDidLoad {
CGFloat w = self.view.bounds.size.width; // 320???
CGFloat h = self.view.bounds.size.height; // 480 ??
}

What am I missing?

thanks.

Upvotes: 0

Views: 1489

Answers (3)

Fattie
Fattie

Reputation: 12582

Be careful, it is possible you have run in to perhaps the most famous bug on the platform:

iPhone app in landscape mode, 2008 systems

This is a bug that catches a lot of people. Notice that on that question, one of the responses has 22 votes - that response is actually completely, totally, 100% wrong.

That shows some of the confusion on the issue.

Be sure to check out everything on there and all the links, eg:

"An important reminder of the ADDITIONAL well-known problem at hand here: if you are trying to swap between MORE THAN ONE view (all landscape), IT SIMPLY DOES NOT WORK. It is essential to remember this or you will waste days on the problem. It is literally NOT POSSIBLE. It is the biggest open, known, bug on the iOS platform."

Upvotes: 2

Andy S.
Andy S.

Reputation: 533

Did you try to obtain the values in viewDidAppear? With viewDidLoad the view was not actually rendered and so it might be still in portrait.

Upvotes: 2

Thomas Clayson
Thomas Clayson

Reputation: 29925

I always have this problem...

I think that all views must render in portrait mode and then switch to landscape. Its a bitch, but the best way to manage this is to use UIViewAutoreizingMasks on all sub-views, that way they'll layout how you want them to.

Upvotes: 1

Related Questions