为什么UIViewController的视图坐标系在导航栏后开始,但它的高度包括导航栏?

时间:2013-06-12 04:54:19

标签: ios objective-c cocoa-touch

我注意到iPhone上的NavigationController,高度为460.所以除了状态栏外,它还包括整个屏幕。

然而,当我在坐标0处添加一些内容时,它会显示在NavigationBar之后,尽管导航栏的大小包含在高度中(意味着此视图的整个框架都会突出屏幕)。

我犯了错误吗?如果没有,为什么这样结构呢?

NSLog(@"Frame: %@", [NSValue valueWithCGRect: self.view.frame]); // prints {(0, 20), (320, 460)}
UIScrollView* scrollView = [[UIScrollView alloc] initWithFrame: CGRectMake(0, self.navigationController.navigationBar.frame.size.height, self.view.frame.width, 50)];
[self.view addSubview: scrollView]; // showing up 44px *after* the nav bar

1 个答案:

答案 0 :(得分:0)

我已经回答了你的其他类似问题,但这里有一个问题。

viewDidLoad中,您会看到视图高度为460,因为此时它尚未调整为导航栏的大小。

但是如果你在viewWillAppear中打出相同的框架,你会看到现在已经为导航栏调整了框架高度。

因此,如果您想在viewDidLoad中添加内容,则需要根据视图框添加内容,添加任意大小调整蒙版将执行您想要的任务,并在视图出现后看到它正确调整。 / p>