2009-08-19 12 views
5

私は、UINavigationController(サイドノート:UITabBarの内部)を使用しています。これは、デフォルトでUINavigationBarが先頭に表示されます。 IBを介してバーを隠すと、バーはルートUIViewControllerだけでなく、スタックにプッシュするすべてのコントローラに対しても表示されなくなります。私を(自動)ポップバックする方法は残してください。ルートUIViewControllerのUINavigationBarを非表示にする

どのようにしてUINavigtionBarをルートUIViewController上だけに隠すことができますか? "navigationBarHidden"のオン/オフを切り替えると、一時的に動作しません。これは、アニメーションが厄介に見えるためです。

他のアイデアはありますか?

+0

答えは私が後にしたものではなく、十分に公正である。 – tcurdt

答えて

5

が、私は実際にこの問題に遭遇し、私はそれがUINavigationCOntrollerデリゲートとした解決方法を、私は基本的にUINavigationControllerサブクラスを持っており、それは、独自のデリゲート作られ、その後、私はあなたが尋ねる方法

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated 
{ 
    if([viewController isKindOfClass: [SomeClass class]]) 
     [self setNavigationBarHidden: NO]; 
    else 
     [self setNavigationBarHidden: YES]; 
} 

を実施していますあなたがそれを表示する必要がある場合、それは私にはうまくいきました。助けてくれることを願っています。

+0

それも私が試したものです。しかし、これは、アニメーションを表示するだけでなく、画面上にバーが表示されるようにします。アニメーションなしでも問題はありません。しかし、私はアニメーションが欲しいです。 – tcurdt

+0

??どういう意味ですか?それは確かにクリエンの上ですが、アニメーション化されていても必要なビューを押すと表示されます...問題は何ですか? – Daniel

+0

バー自体のアニメーションが必要ない場合は、 - navigationController:didShowViewController:animated:メソッドに同じコードを書くことができます。その方法は、ビューがプッシュされた後にのみ表示されます。 – Daniel

0

私の考えはではなく、で、ナビゲーションコントローラの最初の表示部分になります。たとえば、単純なTableViewControllerを作成してから、ドリルダウンしたいときはUINavigationControllerを作成し、手動でそのビューをプッシュします。

私はこれを試していないし、それがうまくいくかどうかわからない。試してみるだけのアイデア。

+0

残念ながら、ルートコントローラーに戻るボタンがないため、これは機能しません。 – tcurdt

+0

私はちょうどこれを行うことができ、* UINavigationBarの左側のボタンを追加することができますか?私は今のところ別のルートを行ったが、試してみる必要があるだろう – tcurdt

0

あなたはそれを行うことができるいくつかの違う方法があります。あなたがUITAbBarコントローラに埋め込まれているという事実は、実際にはかなり複雑です。なぜなら、viewDidAppear:がコントローラがプッシュされているか、タブスワップから呼び出されているかどうかを区別する手段がないからです。あなたはバーを隠す必要があるかどうか、トランジションを引き起こしています。

あなたがそれを処理すると仮定すると、アニメーション化された後にnavigationBarHiddenを変更することです。途中でバーをアニメーション化した後にポップアニメーションを発生させたいので、それを処理するための良い場所はありません。最も速い解決策は、バーを隠すことです。その後、アニメーションを出力してから続行するまで、約0.5秒間手動でランループを実行します。その総体ですが、それは速くて機能します。

- (void)viewWillDisappear:(BOOL)animated { 
    if (animated) { 
    [self.navigationController.navigationBar setHidden:YES animated:YES]; 
    } 

    //GROSS 
    NSDate *endDate = [NSDate dateWithTimeIntervalSinceNow:0.5]; 
    while([[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:endDate]); 
} 

きれいにしたい場合は、最初からUINavigationControllerを再実装することをお勧めします。

+0

ゼロから何も実装する必要はありません。単純にUINavigationControllerがsuficeをサブクラス化して、私の答えをチェックしてください。 – Daniel

+0

あなたはそれを行うことができますが、あなたが何をしているのかに応じて、UINavigationControllerがスケジュールしている他のアニメーションと多くの問題のある対話が起こります。なぜならそれらはすべて同時にコミットされ、私は過去にこのようにしていましたが、(カスタムトランジションのような)何か他のことをしたいと思ったらすぐに、UINavigaitionControllerがアニメーションをスケジュールする方法の内部タイミングに完全に依存しています。 –

8

私には、UInavigationBarを隠した後に空白を避ける最も簡単な方法は隠すことです次のようにUInaviagtionBarを表示してください。構文で

-(void)viewWillDisappear:(BOOL)animated 
{ 
    [super viewDidDisappear:animated]; 
    [self.navigationController setNavigationBarHidden:NO animated:YES]; 
} 
-(void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    [self.navigationController setNavigationBarHidden:YES animated:YES]; 
} 

self.navigationController.navigationBarHidden = YES;私はいつも白いスペースを持っています。

+0

アプローチを使用して、それは私のためにうまくいく – CVertex

関連する問題