У меня возникла проблема, когда мои кадры представлений были совершенно неправильными после возврата к viewController путем извлечения текущего.
Моя иерархия представлений выглядит следующим образом:
UITabbarController,
UINavigationController
HomeSwipeViewController (need as I cant put a UIPageViewController straight into a navController)
UIPageViewController
HomeViewController
В HomeSwipeViewController у меня есть pageViewController, встроенный в containerView, containerView имеет ограничения и должен быть заполнен до супер (установлен в раскадровке):
self.pageController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];
[self.containerView addSubview:self.pageController.view];
[self addChildViewController:self.pageController];
[self.pageController didMoveToParentViewController:self];
[self.pageController.view addFullScreenConstraint]; // full to superView
Внутри homeViewController находится collectionView, на который вы можете нажать, и я нажимаю ViewController на UINavigationController. Это работает нормально, но когда я возвращаюсь к HomeSwipeViewController, все кадры неверны.
Журналы, распечатанные в viewDidAppear из homeSwipeViewController:
Сначала появляется:
[12234:152630] containerView: <UIView: 0x7fea0046cdb0; frame = (0 0; 320 464); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x7fea0046c450>>
[12234:152630] pageController.view: <_UIPageViewControllerContentView: 0x7fea0290b690; frame = (0 0; 320 464); clipsToBounds = YES; opaque = NO; autoresize = W+H; layer = <CALayer: 0x7fea02909f60>>
[12234:152630] self.view: <UIView: 0x7fea0285d2d0; frame = (0 64; 320 504); autoresize = W+H; layer = <CALayer: 0x7fea0285d1d0>>
После поп:
[12234:152630] containerView: <UIView: 0x7fea0046cdb0; frame = (0 0; 0 0); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x7fea0046c450>>
[12234:152630] pageController.view: <_UIPageViewControllerContentView: 0x7fea0290b690; frame = (0 0; 0 0); clipsToBounds = YES; opaque = NO; autoresize = W+H; layer = <CALayer: 0x7fea02909f60>>
[12234:152630] self.view: <UIView: 0x7fea0285d2d0; frame = (0 64; 320 455); autoresize = W+H; layer = <CALayer: 0x7fea0285d1d0>>
Я пробовал вызывать setNeedsDisplay, setNeedsLayout и setNeedsUpdateConstraints в представленииDidAppear. Добавление ограничений программно в viewDidLayoutSubViews.
В консоли не регистрируются нарушенные ограничения.
Я считаю, что это связано с внедрением viewController, потому что, когда я удаляю UIPageViewController и добавляю homeViewContoller в качестве childViewController, происходят те же результаты.
Если ничего не вставлять, то проблем нет.
Все представления имеют translatesAutoresizingMaskIntoConstraints = NO