Переходы вида контейнера между UITableViewController и UIViewController, почему границы перепутались?

#ios #xcode-storyboard

#iOS #xcode-раскадровка

Вопрос:

Я пытаюсь реализовать переключение между двумя контроллерами представления, встроенными в представление контейнера. В реальном приложении кнопка переключения переключается между картой и списком.

В этом макете проблемы UITableViewController Coffee заменяется UIViewController Sweets.

макет в IB

В простом случае это работает нормально, но когда я добавляю переход к контроллеру Sweets для перехода к дочернему UIViewController, все идет наперекосяк после следующих действий — Flip — segue — Back — Flip. Повторите эти действия, и tableview медленно исчезнет с экрана.

между панелью навигации и таблицей появляется пробел

Код в FlipViewController:

 @interface FlipViewController ()
@property (strong, nonatomic) UIViewController *controller1;
@property (strong, nonatomic) UIViewController *controller2;
@property (strong, nonatomic) UIViewController *currentViewController;
@end

@implementation FlipViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.controller1 = [self.childViewControllers firstObject];
    self.currentViewController = self.controller1;

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];
    self.controller2 = [storyboard instantiateViewControllerWithIdentifier:@"Sweets Controller"];
    [self addChildViewController:self.controller2];
}


- (IBAction)flip:(id)sender {
    if (self.currentViewController == self.controller1) {
        [self transitionFromViewController:self.controller1 toViewController:self.controller2 duration:0.3 options:UIViewAnimationOptionTransitionFlipFromRight animations:nil completion:^(BOOL finished) {
            [self.controller2 didMoveToParentViewController:self];
            self.currentViewController = self.controller2;
        }];
    }
    else {
        [self transitionFromViewController:self.controller2 toViewController:self.controller1 duration:0.3 options:UIViewAnimationOptionTransitionFlipFromRight animations:nil completion:^(BOOL finished) {
            [self.controller2 didMoveToParentViewController:self];
            self.currentViewController = self.controller1;
        }];
    }
}
@end
 

Некоторая отладка, по-видимому, указывает на то, что границы UITableView путаются при возврате. У меня проблема с автозапуском или мой подход с transitionFromViewController: неправильный способ добиться этого эффекта? Любые предложения будут оценены, я слишком долго зацикливался на этой ошибке !?

Комментарии:

1. Это а UITableView на регулярной UIViewController основе или а UITableViewController ?

2. В этом макете это UITableViewController, но я пробовал использовать UIViewController, содержащий UITableView, и я все еще получаю проблему.

3. Меняется ли позиция на 20 каждый раз?

4. Ах да. Я не уверен в точной причине или решении, но … 64 = 20 (строка состояния) 44 (панель навигации).