1

我正在尝试让父视图控制器显示子视图控制器的视图。我在父母的中有以下内容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:,我会得到以下信息:

没有状态栏

如果我启用状态栏,我会得到:

状态栏

使用状态栏,子控制器UIView会自动调整,为状态栏的位置腾出空间(因为图像视图居中,即顶部和底部各 10 分)。由于这是一个子视图,因此无论父视图是否有状态栏,它都应该始终使用视图控制器视图的完整大小。除了将任何子视图的大小调整为大 20 像素或在子视图控制器中使用包装器视图之外,还有什么方法可以实现这一点?

4

1 回答 1

-1

尝试将框架设置为 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];
}
于 2013-04-23T15:29:25.403 回答