UIViewController的视图具有奇怪的20px y margin

0xS*_*ina 11 cocoa-touch objective-c ios

我将UIViewController的视图添加到另一个UIViewController的视图中(使用新的UIViewController Containment API).将vc的视图添加为另一个子视图后,从顶部开始有一个奇怪的20px边距.

我记录了视图,它来自原点是0,0.但是,当我记录视图的超级视图时,它是:

<UIViewControllerWrapperView: 0x6c5e2c0; frame = (0 20; 703 748); autoresize = RM+BM; layer = <CALayer: 0x6c54190>>
Run Code Online (Sandbox Code Playgroud)

我显然可以将它的帧改为0,0.但我想知道这样做的正确方法是什么?为什么vc的视图是superview的帧0,20?我应该修改这个还是有更好的办法绕过这个奇怪的边缘?

谢谢

小智 16

check the box "Wants Full Screen"在故事板上解决此问题.

出现问题是因为ParentViewController正在显示导航栏.

正如苹果文档所述:

如果您的应用显示状态栏,则视图会缩小,以使其不会覆盖状态栏.毕竟,如果状态栏不透明,则无法查看或与其下方的内容进行交互.但是,如果您的应用程序显示半透明状态栏,则可以将视图控制器的wantsFullScreenLayout属性的值设置为YES,以允许您的视图全屏显示.状态栏绘制在视图顶部.


0xS*_*ina 5

找出问题所在.需要调用addChildViewController:on self.因此,这是您需要进行的调用序列,以使包含正常工作:

[self addChildViewController:navVC];
[navVC didMoveToParentViewController:self];
[mainView addSubview:navVC.view];
Run Code Online (Sandbox Code Playgroud)

self是父视图控制器.navVC是您要添加的子视图控制器.mainView是父视图控制器中的视图,您可以在其中添加子视图控制器的视图.