1

我一直在查看有关边界与框架的一些帖子,但仍然有些困惑。

我有以下层次结构: UITabBarController > UINavigationController > UIViewController

当我尝试以下 NSLog

NSLog(@"%f %f %f",[[[self tabBarController] view] bounds].size.height, [[[self navigationController] view] bounds].size.height, [[self view] bounds].size.height);

我得到以下输出:

480.000000 431.000000 460.000000

我了解状态栏高度的 20 个差异原因,但我不明白为什么 UIViewController 的界限不包括状态栏高度,但 UINavigationController 和 UITabBarController 的界限包括...

完善我的问题

1)为什么顶部tabBarController的高度是480.0(为什么不排除状态栏高度20pt???)。好的,让我假设高度永远不会排除状态栏高度并继续前进

2) UINavigationController 的高度为 431.0(好吧,合理的猜测是它是 480-49,其中 49 是标签栏的高度)。但是为什么它选择性地排除标签栏的高度而不是状态栏的高度???Apple 的 View Programming Guide 似乎没有解释这一点……但让我们继续……

3) 为什么我的 UIViewController 的高度是 460?!

(3a) 为什么它不像UITabBarController和UINavigationController那样排除状态栏的20pt高度???

(3b) 更重要的是,为什么它不排除导航栏的高度(即为什么不应该是 431-44 = 387?!)

(3c) 为什么在我的 UINavigationController内部的 UIViewController 的高度比 UINavigationController 长???

4

1 回答 1

0

有点想通了...我将 NSLog 放在 viewDidLoad 中,如果我将它们移动到 viewDidAppear,UIViewController 的高度正如预期的那样是 367 (=480-20-44-49),它的原点是 (0, 64) ,占状态栏的20pt和导航栏的44pt

对于 UINavigationController,即使它的 origin.y 为 0 并且高度为 480.0,当我直接打印其导航栏的框架时,导航栏的 origin.y 为 20,所以基本上 UINavigationController 的框架仍在全屏但顶部 20pt(状态栏所在的位置)为空

于 2012-10-08T02:43:05.930 回答