I found a much better way that works independent of the nav controller. Right now, I have this working when embedded in a nav controller, and when NOT embedded (although I’m not using the nav controller right now, so there may be some bug I’ve not seen – e.g. the PUSH transition animation might go funny, or something)
Two NIBs, using Apple’s naming convention. I suspect that in iOS 6 or 7, Apple might add this as a “feature”. I’m using it in my apps and it works perfectly:
- triggers on WILL rotate, not SHOULD rotate (waits until the rotate anim is about to start)
- uses the Apple naming convention for landscape/portrait files (Default.png is Default-landscape.png if you want Apple to auto-load a landscape version)
- reloads the new NIB
- which resets the
self.view
– this will AUTOMATICALLY update the display - and then it calls
viewDidLoad
(Apple will NOT call this for you, if you manually reload a NIB)
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
if( UIInterfaceOrientationIsLandscape(toInterfaceOrientation) )
{
[[NSBundle mainBundle] loadNibNamed: [NSString stringWithFormat:@"%@-landscape", NSStringFromClass([self class])]
owner: self
options: nil];
[self viewDidLoad];
}
else
{
[[NSBundle mainBundle] loadNibNamed: [NSString stringWithFormat:@"%@", NSStringFromClass([self class])]
owner: self
options: nil];
[self viewDidLoad];
}
}