Изменение размера контроллера дочернего представления без ограничений (автоматическое расположение) в представлении контейнера - PullRequest
0 голосов
/ 27 июня 2018

Я хочу использовать контейнерное представление с двумя дочерними контроллерами представления. Но проблема в том, что когда я обновляю фрейм дочерних контроллеров представления с помощью приведенного ниже кода, нижняя часть дочернего контроллера представления не отображается.

@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

Существуют решения с ограничениями, но раскадровка моего проекта не использует Auto Layout (ограничения). Есть ли мнение по поводу решения моей проблемы?
(Может быть, мне нужно найти другой способ проектирования без использования контейнера)

****** РЕДАКТИРОВАТЬ 1 ******

Я добавил didMoveToParentViewController в конце bindToViewController, но без изменений.

- (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 - Решение ******

Попробовал Андре Слотта предложение, оно сработало!

- (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 голосов
/ 27 июня 2018

Должно быть targetVC.view.frame = self.containerView.bounds; вместо targetVC.view.frame = self.containerView.frame;.

...