我正在将UIViewController的视图添加到另一个UIViewController的视图中(使用新的UIViewController Containment API)。将vc的视图添加为另一个子视图后,从顶部开始有一个奇怪的20px边距。
我记录了视图,它来自原点是0,0。但是,当我记录视图的超级视图时,它是:
<UIViewControllerWrapperView: 0x6c5e2c0; frame = (0 20; 703 748); autoresize = RM+BM; layer = <CALayer: 0x6c54190>>
我显然可以将它的帧改为0,0。但我想知道这样做的正确方法是什么?为什么vc观看的超级视图的帧0,20?我应该修改这个还是有更好的方法来绕过这个奇怪的边缘?
由于
答案 0 :(得分:16)
要在故事板上解决此问题,只需check the box "Wants Full Screen"
。
出现问题是因为ParentViewController正在显示导航栏。
正如苹果文档所说:
如果您的应用显示状态栏,则视图会缩小,以便不会覆盖状态栏。毕竟,如果状态栏不透明,则无法查看或与其下方的内容进行交互。但是,如果您的应用程序显示半透明状态栏,则可以将视图控制器的wantsFullScreenLayout属性的值设置为YES,以允许您的视图全屏显示。状态栏位于视图顶部。
答案 1 :(得分:5)
找出问题所在。需要调用addChildViewController:on self。因此,以下是您需要进行的调用序列,以使包含正常工作:
[self addChildViewController:navVC];
[navVC didMoveToParentViewController:self];
[mainView addSubview:navVC.view];
self是父视图控制器。 navVC是您要添加的子视图控制器。 mainView是父视图控制器中的视图,您可以在其中添加子视图控制器的视图。
答案 2 :(得分:2)
我更喜欢下面的代码,对我有用。
[self.view setFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
答案 3 :(得分:2)
- (void) viewDidLoad
{
self.automaticallyAdjustsScrollViewInsets = NO;
[super viewDidLoad];
}
答案 4 :(得分:0)
即使您尝试将状态栏下拉菜单设置为“无”,也请检查视图的大小属性。确保它仍然没有得到一些硬编码高度值460或y源20(在Xcode的图形设计器中)。如果您希望此视图填充其整个父视图,请确保在属性中设置自动调整蒙版以固定到所有边(顶部,左侧,底部,右侧),并且可能也设置为拉伸。
只需查看调试输出,看起来自动调整属性可能只设置为UIViewAutoresizingFlexibleBottomMargin
和UIViewAutoresizingFlexibleRightMargin
。
最后,包含视图可能需要选中自动调整子视图复选框。
答案 5 :(得分:0)
看看wantsFullScreenLayout属性。如果设置为YES,则视图将延伸到UIStatusBar下方。
答案 6 :(得分:0)
答案 7 :(得分:-1)
虽然我没有使用收容API的经验,但我通过在身份检查器中将状态栏设置为无(见下文)解决了许多“20分之后”的问题。
答案 8 :(得分:-9)
只需使用此视口元标记。
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
将“height = device-height”放在那里会导致此问题。