Reputation: 15266
I have a UINavigationController
with a root UIViewController
("root").
The root view controller pushes another UIViewController
"child". When the "child" UIViewController
is on the screen , I rotate the device and expect the "root" view controller to resize accordingly but this isn't happening. After putting a breakpoint in the root view controller:
-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
}
I see that the size is wrong and the root view controller doesn't adjust properly to the change.
Has any one experienced this behaviour?
The code is as so:
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
/// The size is wrong if this view controller is off screen
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
Here is a print screen of the NSLog of the size after rotating the device - This is from the simulator but the behaviour is the same on the device.
Upvotes: 7
Views: 2996
Reputation: 653
Same issue on my project. It seems that UINavigationController and UITabBarController (maybe all viewController?) give to there children the wrong size when you call :
'[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];'
I fixed the issue by overriding 'viewWillTransitionToSize:withTransitionCoordinator:' in my tabBarController and navigation bar controller subclass (same code in both).
- (void)viewWillTransitionToSize:(CGSize)size
withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
for (UIViewController* aViewController in self.viewControllers)
{
[aViewController viewWillTransitionToSize:size
withTransitionCoordinator:coordinator];
}
if ([self presentedViewController])
{
[[self presentedViewController] viewWillTransitionToSize:size
withTransitionCoordinator:coordinator];
}
}
I'm not sure this is the best way, if you found something better, tell me please.
Upvotes: 2
Reputation: 13766
Possibly that only the window rotate. If you print it like this, it is always correct as I have tested.
[coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context)
{
} completion:^(id<UIViewControllerTransitionCoordinatorContext> context)
{
UIWindow *screen = [[[UIApplication sharedApplication] delegate] window];
CGSize mainWindowSize = screen.bounds.size;
NSLog(@"Main window size is %@",NSStringFromCGSize(mainWindowSize));
}];
Upvotes: 0