Container / Child UIViewControllers和状态栏

时间:2013-04-23 14:59:30

标签: ios objective-c uiviewcontroller

我试图让父视图控制器显示子视图控制器的视图。我在父母的viewDidLoad

中获得了以下内容
-(void)viewDidLoad
{
    [super viewDidLoad];

    // create child view controller
    [self setMenuController:[[MenuViewController alloc] initWithNibName:@"MenuView" bundle:nil]];
    [self addChildViewController:[self menuController]];

    // move the child view down 30 pt
    CGRect frame = [[[self menuController] view] frame];
    frame.origin.y = 30;
    [[[self menuController] view] setFrame:frame];
    [[self menuController] setWantsFullScreenLayout:YES];

    [[self view] addSubview:[[self menuController] view]];

    [[[self menuController] view] setNeedsLayout];
}

子视图控制器的xib只是一个红色视图,中心部分透明UIImageView(看重叠)。

如果我在application:didFinishLaunchingWithOptions:中禁用状态栏,我会收到以下信息:

No status bar

如果启用状态栏,我会:

Status bar

使用状态栏,子控制器UIView会自动调整,以便为状态栏的位置腾出空间(因为图像视图居中,最高点10点)和底部)。由于这是子视图,因此无论父级是否具有状态栏,它都应始终使用视图控制器视图的完整大小。有没有办法实现这个,除了将任何子视图调整为大20像素,或在子视图控制器中使用包装器视图?

1 个答案:

答案 0 :(得分:-1)

尝试将frame设置为menuController的视图边界而不是其框架。另外,我不确定你是否想要setWantsFullScreen,这会导致视图低于状态栏。

编辑后:

尝试这样,看看是否有效。

-(void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [self setMenuController:[[MenuViewController alloc] initWithNibName:@"MenuView" bundle:nil]];
    [self addChildViewController:menuController];
    [menuController didMoveToParentViewController:self];
    menuController.view.frame = CGRectMake(self.view.bounds.origin.x, self.view.bounds.origin.y +30, menuController.view.frame.size.width, menuController.view.frame.size.height);
    [self.view addSubview:menuController.view];
}