我的印象是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];
...然后在self.view.frame.size.height
中使用NSLog检查viewDidLoad
,它报告我的视图是460px高。不应该减去我的头衔和身高。提示?
答案 0 :(得分:18)
所以,按要求:
当你致电viewDidLoad
时,视频控制器还没有被推到屏幕上。因此,当您从该方法中获得帧大小时,它将报告其默认值(通常,iPhone应用程序为320x480)。
然后视图自动调整以考虑导航栏。因此,当您在viewWillAppear
中检查帧大小时,现在它将是正确的。通常这对iPhone应用程序来说不是问题。对于iPad应用程序,你有多个方向,这可能有点痛苦!
这有一些例外 - 例如,使用NIB时。
答案 1 :(得分:3)
可能你指的是错误 self
。
当self
引用MyViewController
实例时,您的高度可能为460 - 44像素(标准UIToolbar
高度),但如果self
指的是父视图控制器(例如导航视图控制器本身)您将看到标准视图高度(例如460px)。
您可以通过调用self.view.frame.size.height
实例中的MyViewController
进行检查,例如:视图加载完成后(viewWillAppear:
方法),因此导航控制器已经调整了大小。
如果从self.view.frame.size.height
方法调用viewDidLoad
,该视图可能仍未由其父控制器调整大小。
请再试一次,如果这可以解决您的问题,请告诉我。