3

別のビュー コントローラ (たとえば、別のビュー コントローラをモーダルに表示するビュー コントローラを含むタブ バー コントローラ) 内に含まれるビュー コントローラ内からビューをモーダルに表示しようとしています。

次のような階層:

View Controller 1
    view 1 (belonging to view controller 1)
         view 2 (belonging to view controller 2)
            -> presented view 3 (belonging to view controller 3)

私が抱えている問題は、iPadでは、提示されたView Controllerがステータスバーの下に表示され、提示中のView Controllerがステータスバーの後ろに表示されたままになることです。ビューを画面全体に表示し、ステータス バーの後ろに配置します。

奇妙なことに、View Controller 1 からモーダルを表示すると正常に動作し、View Controller 2 から表示しようとするとこの問題が発生します。

もう1つの奇妙な点は、同じコードをiphoneシミュレーターで実行しても問題はなく、期待どおりに動作しますが、ipad simで実行すると、この問題が発生することです。

例えば:

スクリーンショットを見る

赤いビューはビュー コントローラ 2 に属するビューで、緑はビュー コントローラ 3 に属するビューです。

ご覧のとおり、iPhone ではビュー コントローラー 3 が画面全体をカバーしていますが、iPad ではステータス バーの下に配置されています。

これをテストするには、xcode で新しいシングル ビュー ユニバーサル プロジェクトを作成し、作成したビュー コントローラーの viewDidAppear メソッドに次のコードを追加して、iPhone および iPad シミュレーターで実行します。

-(void)viewDidAppear:(BOOL)animated
{
    UIViewController *vc1 = [UIViewController new];
    vc1.view.backgroundColor = [UIColor redColor];
    [self.view addSubview:vc1.view];

    UIViewController *vc2 = [UIViewController new];
    vc2.view.backgroundColor = [UIColor greenColor];

    [vc1 presentViewController:vc2 animated:YES completion:nil];
}

誰でも何か考えがありますか?りんごの移行ガイドに従って、新しいedgeForExtendedLayoutプロパティなどのすべての組み合わせを試しました。vc2 に何も追加しないようにする必要があります。

ここでは、モーダルを提示するタブバー アプリケーションとモーダルを提示する非タブバー プロジェクトの違いを示す2 つのサンプル プロジェクトを作成しました。どちらも同じ方法でセットアップされ、3 つのビュー コントローラーが使用されます。

iphone と ipad で違うのはおかしいと思います。

オリ

4

2 に答える 2