高低を検索しましたが、出てきたものがこれに対処する最良の方法であるかどうかはわかりません(ただし、これが唯一の方法のようです)。
Want to use multiple nibs for different iphone interface orientations に従って、関連するメソッドを実装しましたが、すべて正常に動作しているようです。残念ながら、私は UINavigationController を扱う必要があり、各ページは縦向きと横向きの両方のモードをサポートし、両方のモードで同じ機能を再現する必要があります。つまり、ある時点でユーザーが縦向きから横向きに切り替えることを決定した場合、アプリ全体で、ユーザーが選択したモードでページを前後に移動できるようにする必要があります。
どうやら不足しているドキュメントのビットは、これに対処する方法です。私の見解では、ナビゲーションを実行する showChild メソッドが添付されたボタンがいくつかあります。縦向きモード (私が理解している限り、これがデフォルトのモードです) では、すべてがうまく機能します。メソッドは次のようになります。
- (IBAction)showChild:(UITapGestureRecognizer *)sender {
UIView *view = [sender view];
PortraitViewController *nextPortraitViewcontroller = [[PortraitViewController alloc] initWithNibName:@"Portrait" bundle:nil];
[self.navigationController pushViewController:nextPortraitViewcontroller animated:YES];
}
しかし、ランドスケープモードになると、さまざまな結果が得られます. LandscapeViewController クラスの showChild: メソッドはまったく同じで、PortraitViewController から始まるビューを作成し、それをナビゲーション コントローラーにプッシュします。すべてうまくいっているように見えますが、戻ると、ランドスケープではなく、前の PortraitViewController が表示されます。また、そのサブビューは、配置した場所ではなく、すべて広がっています。
問題は、Apple がドキュメンテーションとベスト プラクティスをあまり気にしていないように見えるためです (このメカニズム全体は理想とはほど遠いものであり、人間とコンピューターの相互作用の設計とプログラミングの背景にあると言えます)。正しい -- これを行う Apple の方法は?