前提は非常に単純です。UISplitViewControllerを使用するiPadアプリでモーダルビューを表示したいと思います。
ビューの階層は単純です。
/- TableViewController1
/- root:TabBarController -- TableViewController2
SplitViewController -
\- detail:CustomViewController
TableViewController1のテーブルセルの1つをクリックすると、モーダルビューが開きます。
- (void)tableView:(UITableView *)tv didSelectRowAtIndexPath:(NSIndexPath *)ip {
UIViewController *vc = [[MyModalClass alloc] init];
UINavigationController *nc = [[UINavigationController alloc]
initWithRootViewController:vc];
nc.modalPresentationStyle = UIModalPresentationFormSheet;
nc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:nc animated:true];
[nc release];
[vc release];
}
これは問題なく機能します。ビューが表示されます。問題は、風景以外の方向でそれを却下しようとしたときに始まります。
ModalViewControllerでは、次のメソッドがナビゲーションバーのUITabBarButtonによってトリガーされます。
- (void) closeButtonInNavBarWasClicked:(id)sender {
[self dismissModalViewControllerAnimated:true];
}
そして、これが問題の始まりです。
このコードが呼び出されると、モーダルビューは表示されなくなりますが、TabBarController(分割ビューのルートビュー)が突然回転してサイズが変更されます。コンテンツは突然横向きになり、詳細ビューを部分的にカバーしています。詳細ビューはサイズ変更されて小さくなりません。ルートビューで部分的に覆われているだけです。
この問題が発生しない唯一の状況は、アプリがポートレートモードのときにTableViewController1セルをタップしたときです。ルートビューがポップオーバー(バグの十分な原因である可能性があります)にあるにもかかわらず、すべてが正常に機能します。
私がすでに試したいくつかのことは成功しませんでした:
- タブバーをダンプし、分割ビューのルートコントローラーとしてTableViewController1を表示するだけです
- 親TableViewController1がMyModalClassビュー自体ではなく、モーダルビューを閉じるように、デリゲートプロトコルを作成します。
- TableViewController1.splitViewControllerでモーダルビューを表示/非表示にすると、実際には事態が悪化します。ビューは表示されません。
- いくつかのヤギを犠牲にすることも助けにはなりませんでした。
この問題についてのご意見をいただければ幸いです。