UITabBarController,UINavigationController和子UIViewController中的区别不同

时间:2012-10-01 04:54:04

标签: iphone ios uiviewcontroller uinavigationcontroller uitabbarcontroller

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

我有以下层次结构: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编程指南似乎并没有解释......但让我们继续......

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

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

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

(3c)为什么我的UIVavigationController INSIDE 我的UINavigationController的 LONGER height 比UINavigationController ???

1 个答案:

答案 0 :(得分:0)

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

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