うまく機能するSVCセットアップがあります。SPC のマスター ビューと詳細ビューはどちらも UINavigationController であり、それぞれに個別のルート ビュー コントローラーがあります。
私のアプリケーションは完璧に動作します。縦向きモードでも横向きモードでも起動でき、すべてが正常に機能します。「マスター」ポップアップ ボタンは、ポートレート モードでは表示されますが、ランドスケープ モードでは非表示になります。マスター プレーンとディテール プレーンの両方が適切にアニメートおよび回転し、ポップや奇妙なアニメーション アーティファクトは存在せず、すべてが適切にストレッチされます。仕様ごとに 100% の満足度。
詳細ビュー コントローラーを置き換えると問題が発生します。uinavi コントローラーのルート ノードを置き換えることはできないため、新しい を作成UINavigationController
し、詳細ビューで必要な新しいビューを割り当てます。詳細ビューのビューは 1-2-3 レベルの深さを実行できるため、これを行いますが、一意の「ルート」ビューを割り当てることができる必要があります (たとえば、ルートを完全に置き換えることができる必要がありますUINavigationController
)。
コードは次のようになります。
self.detailViewController = [[SomeNewController1of3 alloc] initWithNibName:@"SomeNewController1of3" bundle:nil];
self.splitViewController.delegate = self.detailViewController;
UINavigationController *newNC = [[UINavigationController alloc] initWithRootViewController:self.detailViewController];
self.splitViewController.viewControllers = @[navigationController, newN];
まず、それが何であれ、新しいビューコントローラーを作成します。次に、splitviewcontroller のデリゲートを = 新しく作成された viewcontroller に設定します (そのためwillHideViewController
、 などが起動します)。次に、新しく作成されたビューコントローラーを格納するナビコントローラーを作成して、そこからプッシュおよびポップできるようにします。最後に、分割ビュー コントローラーの 2 番目の (詳細) ビューを新しいナビ コントローラーに置き換えます。
繰り返しますが、このプランは横向きで始めると問題なく機能します。
ポートレートで始めたとき、これらは私が気づいた異常です:
- すべてのポップアップ (アラート ボックス、マスター ビューなど) は奇妙な回転をしており、表示されるとぎこちない場所から飛び出します。これらのポップアップは、正しい位置から単純に「スライド」するのではなく、表示されたときに右に回転するように見えます。
- マスター ビューが表示されると、上記の奇妙な回転を行った後、一瞬完全に消えて (黒い空の領域が残ります)、元の場所に戻ります。
- デバイスのローテーションが完了するまで、マスター ビューのポップアップを表示する詳細ビュー コントローラーの「マスター」ボタンが表示されません。
willHideViewController
ブレークポイントで確認した後、上記の方法で呼び出されていないと結論付けました。
私が得られないのは、ランドスケープで開始するとすべてが完璧に動作するのに、これらすべてのエラーがポートレートで発生する理由です? 私のすべてのビューは、実際には IB でデフォルトの向きが縦に設定されており、サイズに合わせて調整されています。また、それらがクレイジーなインターフェースであるというわけではありません。それらはすべて単なるストックテーブルビューです。
この問題に遭遇した人、または回避する方法を見つけた人はいますか?