Как удалить из контейнера вид, не разрушая сложный макет? - PullRequest
0 голосов
/ 21 января 2020

У меня есть сцена, которая построена как на прикрепленном экране

Сцена

В зависимости от выбора кнопки на верхней панели, я загружаю специфицированный c контроллер представления в представлении контейнера. Когда выбор изменяется или пользователь нажимает кнопку «Назад» на контроллере, тогда следует удалить внутреннее содержимое контейнера c.

Код для добавления в представление контейнера:

if (self.containerVC != nil) {
    [self removeController];
}

UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
FirstViewController* firstVC = [storyboard instantiateViewControllerWithIdentifier:@"First"];

[self addChildViewController:firstVC];
[self.containerVieww addSubview:firstVC.view];
firstVC.view.frame = CGRectMake(0, 0, self.containerVieww.bounds.size.width, self.containerVieww.bounds.size.height);
[firstVC.view layoutSubviews];
[firstVC didMoveToParentViewController:self];

firstVC.modalPresentationStyle = UIModalPresentationCurrentContext;

[UIView animateWithDuration:0.5 animations:^{
    self.logViewHeight.constant = self.contentView.frame.size.height * 0.9;
    [firstVC.view layoutSubviews];
}];

firstVC.delegate = self;
self.containerVC = firstVC;

Код для удаления из представления контейнера:

[self.containerVC dismissViewControllerAnimated:YES completion:nil];

[UIView animateWithDuration:0.5 animations:^{
    self.logViewHeight.constant = 0;
    [self.view layoutIfNeeded];
 }];

[self willMoveToParentViewController:nil];
[self removeFromParentViewController];
[self.containerVC.view removeFromSuperview];    // Caused layout destoying !!!
self.containerVC = nil;

После вызова метода removeFromSuperview исчезло «Синее представление» в моем макете.

Как удалить из представления контейнера без разрушения сложной компоновки?

...