I’m showing navigationBar in parent view controller:
- (void)viewWillDisappear:(BOOL)animated
{
[self.navigationController setNavigationBarHidden:NO animated:YES];
[super viewWillDisappear:animated];
}
Then, in next view controller
- (void)viewDidLoad
{
/* ... */
NSLog(@"%i, %g", self.navigationController.navigationBarHidden,
self.view.frame.size.height);
}
- (void)viewWillAppear:(BOOL)animated
{
/* ... */
[super viewWillAppear:animated];
NSLog(@"%i, %g", self.navigationController.navigationBarHidden,
self.view.frame.size.height);
}
- (void)viewWillLayoutSubviews
{
NSLog(@"%i, %g", self.navigationController.navigationBarHidden,
self.view.frame.size.height);
}
- (void)viewDidAppear:(BOOL)animated
{
NSLog(@"%i, %g", self.navigationController.navigationBarHidden,
self.view.frame.size.height);
}
outputs:
-[viewDidLoad]: 1, 416
-[viewWillAppear:]: 0, 460
-[viewWillLayoutSubviews]: 0, 416
-[viewDidAppear:]: 0, 416
As you see viewWillAppear gets wrong self.view.frame.size.height. It would be OK to use viewWillLayoutSubviews, but it was introduced in iOS5. Is it possible to get proper frame height in viewWillAppear?
Here is the best solution I’ve got so far: