title: Content falls beneath navigation bar when embedded in custom container view controller.
body: <p><strong>UPDATE</strong></p>
  
  <p>Based on Tim's answer, I implemented the following in each view controller that had a scrollview (or subclass) that was part of my custom container:</p>
  
  <pre><code>- (void)didMoveToParentViewController:(UIViewController *)parent
  {
      if (parent) {
          CGFloat top = parent.topLayoutGuide.length;
          CGFloat bottom = parent.bottomLayoutGuide.length;
  
          // this is the most important part here, because the first view controller added 
          // never had the layout issue, it was always the second. if we applied these
          // edge insets to the first view controller, then it would lay out incorrectly.
          // first detect if it's laid out correctly with the following condition, and if
          // not, manually make the adjustments since it seems like UIKit is failing to do so
          if (self.collectionView.contentInset.top != top) {
              UIEdgeInsets newInsets = UIEdgeInsetsMake(top, 0, bottom, 0);
              self.collectionView.contentInset = newInsets;
              self.collectionView.scrollIndicatorInsets = newInsets;
          }
      }
  
      [super didMoveToParentViewController:parent];
  }
  </code></pre>
  
  <p>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~</p>
  
  <p>I have custom container view controller called <code>SegmentedPageViewController</code>. I set this as a <code>UINavigationController's rootViewController</code>.</p>
  
  <p>The purpose of <code>SegmentedPageViewController</code> is to allow a <code>UISegmentedControl</code>, set as the NavController's titleView, to switch between different child view controllers.</p>
  
  <p><img src="https://i.stack.imgur.com/O5t9X.png" alt="enter image description here"></p>
  
  <p>These child view controllers all contain either a scrollview, tableview, or collection view.</p>
  
  <p>We're finding that the first view controller loads fine, correctly positioned underneath the navigation bar. But when we switch to a new
  view controller, the navbar isn't respected and the view is set underneath the nav bar.</p>
  
  <p><img src="https://i.stack.imgur.com/70B7U.png" alt="enter image description here"></p>
  
  <p>We're using auto layout and interface builder. We've tried everything we can think of, but can't find a consistent solution.</p>
  
  <p>Here's the main code block responsible for setting the first view controller and switching to another one when a user taps on the segmented control:</p>
  
  <pre><code>- (void)switchFromViewController:(UIViewController *)oldVC toViewController:(UIViewController *)newVC
  {
      if (newVC == oldVC) return;
  
      // Check the newVC is non-nil otherwise expect a crash: NSInvalidArgumentException
      if (newVC) {
  
          // Set the new view controller frame (in this case to be the size of the available screen bounds)
          // Calulate any other frame animations here (e.g. for the oldVC)
          newVC.view.frame = self.view.bounds;
  
          // Check the oldVC is non-nil otherwise expect a crash: NSInvalidArgumentException
          if (oldVC) {
              // **** THIS RUNS WHEN A NEW VC IS SET ****
              // DIFFERENT FROM FIRST VC IN THAT WE TRANSITION INSTEAD OF JUST SETTING
  
  
              // Start both the view controller transitions
              [oldVC willMoveToParentViewController:nil];
              [self addChildViewController:newVC];
  
              // Swap the view controllers
              // No frame animations in this code but these would go in the animations block
              [self transitionFromViewController:oldVC
                                toViewController:newVC
                                        duration:0.25
                                         options:UIViewAnimationOptionLayoutSubviews
                                      animations:^{}
                                      completion:^(BOOL finished) {
                                          // Finish both the view controller transitions
                                          [oldVC removeFromParentViewController];
                                          [newVC didMoveToParentViewController:self];
                                          // Store a reference to the current controller
                                          self.currentViewController = newVC;
                                      }];
          } else {
  
              // **** THIS RUNS WHEN THE FIRST VC IS SET ****
              // JUST STANDARD VIEW CONTROLLER CONTAINMENT
  
              // Otherwise we are adding a view controller for the first time
              // Start the view controller transition
              [self addChildViewController:newVC];
  
              // Add the new view controller view to the view hierarchy
              [self.view addSubview:newVC.view];
  
              // End the view controller transition
              [newVC didMoveToParentViewController:self];
  
              // Store a reference to the current controller
              self.currentViewController = newVC;
          }
      }
  
  }
  </code></pre>