1. ホーム
  2. ios

[解決済み] presentViewControllerとナビゲーションバーの表示

2022-11-06 08:42:59

質問

ビューコントローラを階層化し、最上位のコントローラをモーダル表示させています。

'UIViewController:presentViewController:viewControllerToPresent:animated:completion'

presentViewController:animated:completion:』のdocsに注意。

iPhoneとiPod touchでは、提示されるビューは常にフルスクリーンです。 iPadでは、プレゼンテーションは modalPresentationStyleプロパティの値に依存します'。

modalPresentationStyle」については、ドキュメントに書かれています。

プレゼンテーションスタイルは、モーダルに表示されるビューコントローラが画面上にどのように表示されるかを決定します。iPhone と iPod touch では、モーダル ビュー コントローラーは常にフルスクリーンで表示されますが、iPad では、いくつかの異なる表示オプションがあります。

ビュー コントロールが表示された後、ナビゲーション バーがステータス バーの下に表示されるようにする方法はありますか? このドキュメントは、iPhone/iPod のオプションはなく、iPad でのみ表示されると解釈すべきでしょうか?

以前は、私は 'UIViewController:presentModalViewController:animated' を使用していましたが、iOS 5.0 以降、この API は非推奨となったため、新しい API に切り替えています。

視覚的には、新しいコントローラを画面の下からスライドさせて、古い API がそうであったようにすることを望んでいます。

[コードで更新中]。

// My root level view:
UIViewController *vc = [[RootViewController alloc] 
                            initWithNibName:nil 
                            bundle:[NSBundle mainBundle]];
navController = [[UINavigationController alloc] initWithRootViewController:vc];        
....

// Within the RootViewController, Second view controller is created and added 
// to the hierarchy. It is this view controller that is responsible for 
// displaying the DetailView:
SecondTierViewController *t2controller = [[SecondTierViewController alloc] 
                                           initWithNibName:nil
                                           bundle:[NSBundle mainBundle]];

[self.navigationController pushViewController:t2controller animated:YES];

// Created by SecondTierViewController 
DetailViewController *controller = [[DetailViewController alloc] initWithNibName:nil                                                                                 
                                        bundle:[NSBundle mainBundle]];  

controller.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
controller.modalPresentationStyle = UIModalPresentationCurrentContext;

[self.navigationController presentViewController:controller 
                                        animated:YES 
                                        completion:nil];

どのように解決するのですか?

確かにiPhoneでビューコントローラをモーダルに表示すると、ナビゲーションコントローラのトップビューコントローラに表示するなど、どのように表示しても常にフルスクリーンで表示されることになります。しかし、以下の回避方法で常にナビゲーションバーを表示させることができます。

そのビューコントローラをモード表示するのではなく、そのルートビューコントローラを希望するビューコントローラとして設定したナビゲーションコントローラをモード表示します。

MyViewController *myViewController = [[MyViewController alloc] initWithNibName:nil bundle:nil];
UINavigationController *navigationController = 
    [[UINavigationController alloc] initWithRootViewController:myViewController];

//now present this navigation controller modally 
[self presentViewController:navigationController
                   animated:YES
                   completion:^{

                        }];

ビューがモーダルに表示されると、ナビゲーションバーが表示されるはずです。