I was under the impression that a UINavigationController's navigation bar would always push down the child view's height, such that the child view's origin was at the bottom of the title bar.
But when I present a view controller like this ...
MyViewController *viewController = [[MyViewController alloc] init];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
viewController.title = @"My View Controller";
viewController.navigationItem.prompt = @"My Prompt";
viewController.delegate = self;
[self presentModalViewController:navigationController animated:YES];
[navigationController release]; [viewController release];
... and then check self.view.frame.size.height
with an NSLog in viewDidLoad
, it reports that my view is 460px high. Shouldn't it subtracting the height of my title & prompt?
Probably you are referring to the wrong
self
here. Whenself
refers to theMyViewController
instance you will probably have an height of 460 - 44 pixels (standardUIToolbar
height), but ifself
refers to a parent view controller (e.g. the navigation view controller itself) you'll see the standard view height (e.g. 460px).You can check this by calling
self.view.frame.size.height
inside the instance ofMyViewController
, e.g. when the view has finished loading (viewWillAppear:
method), and so has already been resized by its navigation controller.If you call
self.view.frame.size.height
from theviewDidLoad
method, the view probably has still not been resized by its parent controller.Please try again and let me know if this fixes your problem.
So, as requested:
When you call
viewDidLoad
the view controller hasn't been pushed onto the screen yet. So when you get the frame size from within that method it will report its' default (typically, 320x480 for an iPhone app).The view then autoresizes to take into account the navigation bar. So when you check the frame size in
viewWillAppear
it will now be correct. Typically this isn't a problem for iPhone apps. For iPad apps, where you have multiple orientations, it can be a bit of a pain!There are a few exceptions to this - for example, when using NIBs.