为什么我的根视图的高度不考虑其导航栏?

Ric*_*evy 5 iphone cocoa-touch uiview uinavigationcontroller

我的印象是UINavigationController的导航栏总是按下子视图的高度,这样子视图的原点就在标题栏的底部.

但是当我提出像这样的视图控制器时......

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];
Run Code Online (Sandbox Code Playgroud)

...然后检查self.view.frame.size.heightNSLog viewDidLoad,它报告我的视图是460px高.它不应该减去我的标题和提示的高度?

lxt*_*lxt 18

所以,按要求:

当你调用viewDidLoad视图控制器时还没有被推到屏幕上.因此,当您从该方法中获得帧大小时,它将报告其默认值(通常,iPhone应用程序为320x480).

然后视图自动调整以考虑导航栏.因此,当您检查框架尺寸时,viewWillAppear它现在将是正确的.通常这对iPhone应用程序来说不是问题.对于iPad应用程序,您有多个方向,可能会有点痛苦!

这有一些例外 - 例如,使用NIB时.