現在のフレームをポップしてviewControllerに戻った後、ビューフレームが完全に間違っているという問題がありました。
私のビュー階層は次のとおりです。
UITabbarController,
UINavigationController
HomeSwipeViewController (need as I cant put a UIPageViewController straight into a navController)
UIPageViewController
HomeViewController
HomeSwipeViewController には、containerView に pageViewController が埋め込まれています。
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 に戻ると、フレームがすべて正しくありません。
homeSwipeViewController の viewDidAppear に出力されたログ:
最初に表示されます:
[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>>
viewDidAppear で setNeedsDisplay、setNeedsLayout、setNeedsUpdateConstraints を呼び出してみました。viewDidLayoutSubViews ですべてプログラムによって制約を追加します。
壊れた制約はコンソールに記録されません。
UIPageViewController を削除して homeViewContoller を childViewController として追加すると、同じ結果が発生するため、viewController の埋め込みに関係していると思います。
何も埋め込まなくても問題ありません。
すべてのビューには translatesAutoresizingMaskIntoConstraints = NO があります