我一直在查看有关边界与帧的一些帖子,但仍然有点困惑。
我有以下层次结构: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 ???
答案 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(状态栏为空)