Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为什么UIViewController的视图坐标系在导航栏之后开始,但其高度包括导航栏?_Ios_Objective C_Cocoa Touch - Fatal编程技术网

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

Ios 为什么UIViewController的视图坐标系在导航栏之后开始,但其高度包括导航栏?,ios,objective-c,cocoa-touch,Ios,Objective C,Cocoa Touch,我注意到iPhone上有导航控制器,高度是460。因此,它包括除状态栏之外的整个屏幕 但是,当我在坐标0处添加某些内容时,它会显示在导航栏之后,尽管导航栏的大小包含在高度中,这意味着该视图的整个框架都会贴在屏幕上 我犯了错误吗?如果不是,为什么它的结构是这样的 NSLog(@"Frame: %@", [NSValue valueWithCGRect: self.view.frame]); // prints {(0, 20), (320, 460)} UIScrollView* scrollVi

我注意到iPhone上有导航控制器,高度是460。因此,它包括除状态栏之外的整个屏幕

但是,当我在坐标0处添加某些内容时,它会显示在导航栏之后,尽管导航栏的大小包含在高度中,这意味着该视图的整个框架都会贴在屏幕上

我犯了错误吗?如果不是,为什么它的结构是这样的

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

我已经回答了你另外一个类似的问题,但这里有一个问题

在viewDidLoad中,您将看到视图高度为460,因为此时它还没有调整大小以考虑导航栏

但是,如果您在“显示视图”中将同一帧打印出来,您将看到,现在导航栏的帧高度已调整


因此,如果要在viewDidLoad中添加某些内容,则需要根据“视图”框架添加该内容,添加任何可以完成所需工作的大小调整掩码,并在视图出现后查看其是否正确调整。

要获取框架,可以使用NSLog@%@,NSStringFromCGRectself.view.frame@LithuT.V哈哈,做了很多日志之后,谢谢你了。哈哈,是的,我正要结束/自我回答这个问题。再次感谢——对于阅读本文的任何人,这里的链接指向关于自动调整面具大小的另一个问题,但答案相同: