在容器视图中无限制地调整子视图控制器的大小(自动布局)

时间:2018-06-27 08:55:39

标签: ios objective-c uicontainerview

我想将容器视图与两个子视图控制器一起使用。但是问题是,当我使用以下代码更新子视图控制器框架时,子视图控制器的以下部分不可见。

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    firstVC = [self.storyboard instantiateViewControllerWithIdentifier:@"firstViewController"];
    secondVC = [self.storyboard instantiateViewControllerWithIdentifier:@"secondViewController"];
}

- (void)removeViewController
{
    [currentVC.view removeFromSuperview];
    [currentVC removeFromParentViewController];
}

- (void)bindToViewController:(UIViewController *)targetVC
{
    if (currentVC != nil)
    {
        [self removeViewController];
    }

    [self addChildViewController:targetVC];
    targetVC.view.frame = self.containerView.frame;
    [self.containerView addSubview:targetVC.view];
    currentVC = targetVC;
}

- (IBAction)firstOpen:(id)sender
{
    [self bindToViewController:firstVC];
}

- (IBAction)secondOpen:(id)sender
{
    [self bindToViewController:secondVC];
}

@end

有些解决方案有约束,但是我的项目情节提要板不使用“自动布局”(约束)。 对我的问题的解决方案有什么看法?
(也许我不得不在不使用容器视图的情况下找到另一种设计方式)

******编辑1 ******

我在bindToViewController的末尾添加了 didMoveToParentViewController ,但没有更改。

- (void)bindToViewController:(UIViewController *)targetVC
{
    if (currentVC != nil)
    {
        [self removeViewController];
    }

    [self addChildViewController:targetVC];
    targetVC.view.frame = self.containerView.frame;
    [self.containerView addSubview:targetVC.view];
    currentVC = targetVC;
    [targetVC didMoveToParentViewController:self];
}

******编辑2-解决方案******

尝试了AndréSlotta 的建议,它奏效了!

- (void)bindToViewController:(UIViewController *)targetVC
{
    if (currentVC != nil)
    {
        [self removeViewController];
    }

    [self addChildViewController:targetVC];
//    targetVC.view.frame = self.containerView.frame;
    targetVC.view.frame = self.containerView.bounds;
    [self.containerView addSubview:targetVC.view];
    currentVC = targetVC;
}

1 个答案:

答案 0 :(得分:4)

它必须是targetVC.view.frame = self.containerView.bounds;而不是targetVC.view.frame = self.containerView.frame;