2012-02-21 16 views
4

私はアプリケーションの下にビューを追加するライブラリを作成しています(ライブラリがアプリケーションに統合されている場合)。
ビューコントローラのビューのフレームパラメータを使用してビューのサイズを取得し、マイライブラリのビューフレームを計算して表示します。
問題は、ナビゲーションバーがある場合、私のビューは実際のビューの下にまだ表示されていることです。だから、現在のビューコントローラがナビゲーションコントローラに基づいているかどうか、そしてナビゲーションバーがそのビューで表示されるかどうかを知りたい。どうすれば見つけることができますか?iOS - ナビゲーションバーを確認

答えて

3

UINavigationBarは、UIViewのすべての細かいプロパティおよび動作を持ち、これらのプロパティの1つはhiddenです。

ナビゲーションバーのハンドルを取得できる場合は、hiddenYESまたはNOであるかどうかを確認するだけです。これを行うには


一つの方法は、ナビゲーションコントローラを設定および/またはあなたのライブラリーの代わりにバーできるライブラリを使用していますので、誰でも自分のライブラリーのためのUINavigationControllerプロパティまたはアクセサ(セッター&ゲッターを)持っていることであろう。

+0

私は、ナビゲーションバーのプロパティを知っています。しかし、アプリケーションがナビゲーションコントローラに基づいているかどうかを確認する方法は?アプリがナビゲーションコントローラに基づいている場合は、ナビゲーションバーのプロパティを確認できます。ではない? – Satyam

+0

ナビゲーションバーのハンドルを取得するにはどうすればよいですか? – Satyam

+0

ビューコントローラまたはアプリケーションデリゲートのいずれかにナビゲーションコントローラがある場合は、それがIBOutletであることを確認してから、ナビゲーションバーの[UINavigationController'のnavigationBarプロパティ](https://developer.apple .com/library/ios/documentation/UIKit/Reference/UINavigationController_Class/Reference/Reference.html#// apple_ref/occ/instp/UINavigationController/navigationBar)(ドキュメントはあなたのためにリンクされています) –

7

私は返信に遅れていますが、同じことをやろうとする他の人(私のように:D)です。

このコードは、あなたの問題を解決することがあります。

id nav = [UIApplication sharedApplication].keyWindow.rootViewController; 
if ([nav isKindOfClass:[UINavigationController class]]) { 
    UINavigationController *navc = (UINavigationController *) nav; 
    if(navc.navigationBarHidden) { 
     NSLog(@"NOOOO NAV BAR"); 
    } else { 
     NSLog(@"WE HAVE NAV BAR"); 
    } 
} 
+0

私はこのスニペットを長年使ってきました(ありがとう)。私は最近不足を発見した。 UIAlertViewが現在表示されている場合、この関数は失敗します。さらに調査したところ、次のことが明らかになりました。 '(lldb)po nav <_UIAlertShimPresentingViewController:0x7fa00d095fb0>'このケースを処理するための提案はありますか? – alexgophermix

+0

ありがとう、仲間。シンプルで良い。乾杯! – Felipe

+0

@alexgophermix私はあなたがUIApplicationからWindowsのproperyアレイを使用し、あなたのルートコントローラを見つけることができると思う、その瞬間に2つのウィンドウがあると思う。 –

関連する問題