2009-06-04 6 views
18

私はこれを二度見つけました。モーダルビューを表示するとナビゲーションバーが表示されなくなることがあります

は時々次のコード行使用:

[self.navigationController presentModalViewController:aViewController animated:YES]; 

すると、ビューが表示されますが、ナビゲーションバーは、非表示になります。

私が書くことができます:

[self.navigationController setNavigationBarHidden:NO]; 

私の心のコンテンツに、どこでも私は効果なしと考えることができます。

誰もこれに遭遇しましたか?

私は何か愚かなことをしていますか?

答えて

38

いいえ、私もこれに遭遇しました。問題は、UIViewControllerベースのクラスでモーダルビューコントローラを表示するとき、呼び出し側のナビゲーションコントローラのナビゲーションバーをモーダルに拡張しないことです。モーダル表示は画面全体をカバーします。私が問題を解決するためにやったのは、UINavigationControllerを作成し、その上にUIViewControllerベースのクラスをプッシュし、次にpresentModalViewControllerをナビゲーションコントローラのインスタンスに渡すことでした。

が好き:上部のナビゲーションバーを持っているように私に許さ

UIViewController *vc = [[UIViewController alloc] init]; 
UINavigationController *cntrol = [[UINavigationController alloc] initWithRootViewController:vc]; 
[self presentModalViewController:cntrol animated:YES]; 
[cntrol release]; 

あなたの特別なケースで役立つかどうかは分かりませんが、私が示唆する唯一のもう一つは、モーダルの振る舞いを電話の最下部の44pxに止まるUIAnimationで複製することです。そうすれば、元のナビゲーションバーが見えるようになります。

+1

ああ、私はばかです。私は上のナビゲーションコントローラ、ツールバー、ツールバーは必要ありませんでした。ありがとう –

+0

ところで、過去5時間、その曲を私の頭の中に入れてくれてありがとう。私はそれがクリスマスのように感じる。 –

+0

私は長い間、私の頭の中を走っていました:-) –

1

多分これは明白ですが、モーダルビューで行われ、それを却下したくなったら、あなたはあなたのモーダルVCにこのような何かを行う必要があります。

[parentController dismissModalViewControllerAnimated:YES];

ここで、parentControllerは、モーダルビューを表示しているvcへの参照です。

+1

私はこうです [self dismissModalViewControllerAnimated:YES]; と同じ効果があります。 – Jonny

+0

ええ、あなたは正しいジョニーです、多分他のいくつかの問題のために、自己は私のために働いていなかった、誰が知っている....:P –

2

@HeatMiserは、ナビゲーションバーにアイテムを表示できないという「バグ」を回避する素晴らしい方法を示しています。ただし、これは厳密にはPresentationのバグであるかどうかはわかりません。モーダル操作では、基本的なビューのインターフェーステーマを抜けてはならないからです。モーダル操作のテーマを基にしたUIテーマを模倣しても問題ありませんが、ナビゲーションビューで真のモーダルビューをラップすることは間違っています。

代わりに、以下は私のために働き、Mailプログラム(iPhone上)で「New Message」と同じ動作をします。

IBでは、UIToolBarをモーダル画面の上部に配置し(ナビゲーションバーを模倣する)、UIBarButtonItemとその間にフレキシブルスペースバーボタンアイテムを「キャンセル」および「保存」して、ボタンを左右に整列させます。次に、UIToolBarの中央にあるUILabelを追加します(Font Helvetica、Bold、Size 18はナビゲーションバーのタイトルと一致するように見えます)。モーダルのUIViewControllerのIBActionにボタンを接続すると、完了です。

1

ナビゲーションコントローラアクティブがある場合、あなただけ使うべき

[self.navigationController pushViewControllerAnimated:どのように]。

他のView Controllerをスライドさせながら、「自動」バックボタンのサポートを備えた一貫したユーザーインターフェイスをユーザーに提供します。

ナビゲーションコントローラが使用されると、モーダルビューコントローラを表示することは、画面上の使用可能な領域を拡大する場合にのみ行う必要があります。そして、実際には、あなたが「ナビゲーション」コントローラが実装していた「タスク」または「ステップ」から遠ざかっていることをユーザーに知らせるために、派手なアニメーションを使用する必要があります。

関連する問題