UIViewController orientation changes in a UINavigationController stack
<p>I have a UINavigationController with two UIViewControllers on it (A and B).  From A, I push B onto the stack.  Then the user re-orients the device.  I need to move some things around the screen (buttons, etc) to be visible in the new orientation on A.</p>

<p>I find that -shouldAutorotateToInterfaceOrientation is getting called on both A and B (and returning YES).  But the -will / -didRotateFromInterfaceOrientation are only getting called on the visible ViewController (B).  When B gets popped off the stack, A is shown in the new (correct) orientation but without the buttons getting moved as needed.</p>

<p>To solve this, I find myself implementing the following pattern:</p>

<p>in header file:</p>

<pre><code>@interface A : UIViewController {
    // ...
    UIInterfaceOrientation layoutOrientation;
}
// ...
- (void)orientationChanged;
@end
</code></pre>

<p>in .m file:</p>

<pre><code>- (void)viewDidLoad {
    // ...
    layoutOrientation = self.interfaceOrientation;
}

- (void)viewWillAppear:(BOOL)animated {
    // ...
    if (layoutOrientation != self.interfaceOrientation) {
        [self orientationChanged];
    }
}

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    [self orientationChanged];
}

- (void)orientationChanged {
    // move my buttons
    layoutOrientation = self.interfaceOrientation;
}
</code></pre>

<p>Essentially, I'm checking to see if the orientation changed in -viewWillAppear and doing the work to update the UI there if needed.  It works just fine, but this seems (a) tedious, and (b) a lot of duplicated code among my various classes like A.  I can fix (b) by moving the code to a common superclass, but this still seems like something I shouldn't have to do.</p>

<p>Is there a better way of moving my buttons around on views that are not top-most on the navigation stack?  My views come from .xibs if there's something in IB I need to check.  Should I just be designing my views such that they don't need to move buttons around when the orientation changes?</p>

<p>Thanks!</p>
