iphone - ステータスバー - ナビゲーションバーの表示/非表示




ナビゲーション バー swift 非 表示 (6)

1つの方法は、属性のインスペクタでBar Visibility "Show Navigation Bar"のチェックを外すことです。

私は2つのバーのボタンで構成されるナビゲーションバーを持つアプリを持っています。 ユーザーが画面をダブルタップすると、このナビゲーションバーを非表示にして表示したいと思います。

最初は、ナビゲーションバーを非表示にする必要があります。 ユーザーが画面をダブルタップすると、ナビゲーションバーにはiPhoneのフォトギャラリーに表示されるようなアニメーションが表示されます。

どうすればこのことができますか? 提案は常に高く評価されます。


SWIFT CODE:これはiOS 3.2以降で完全に動作します。

  override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)

    let tapGesture = UITapGestureRecognizer(target: self, action: "hideNavBarOntap")let tapGesture = UITapGestureRecognizer(target: self, action: "hideNavBarOntap")
    tapGesture.delegate = self
    self.view.addGestureRecognizer(tapGesture)

書いて

func hideNavBarOntap() {
    if(self.navigationController?.navigationBar.hidden == false) {
        self.navigationController?.setNavigationBarHidden(true, animated: true) // hide nav bar is not hidden
    } else if(self.navigationController?.navigationBar.hidden == true) {
        self.navigationController?.setNavigationBarHidden(false, animated: true) // show nav bar
    }
}

スイフトでこれを試して、

self.navigationController?.navigationBarHidden = true  //Hide
self.navigationController?.navigationBarHidden = false //Show

または

self.navigationController?.setNavigationBarHidden(true, animated: true) //Hide
self.navigationController?.setNavigationBarHidden(false, animated: true) //SHow

ここでは、非常に迅速かつ簡単な解決策です:

self.navigationController.hidesBarsOnTap = YES;

これは、ダブルタップの代わりにシングルタップで機能します。 また、現在のView Controllerをプッシュまたはポップした後でも、ナビゲーションコントローラの動作が変更されます。

ViewWillAppear:およびviewWillDisappear:アクション内のコントローラでこの動作を変更することは、単一のView Controllerに対してのみ動作を設定する場合に可能です。

ここにdocumentationがありdocumentation


これは、コードのいくつかの行に収まるものではありませんが、これはあなたのために働くかもしれない1つのアプローチです。

ナビゲーションバーを非表示にするには:

[[self navigationController] setNavigationBarHidden:YES animated:YES];

それを表示するには:

[[self navigationController] setNavigationBarHidden:NO animated:YES];

このメソッドのドキュメントは、こちらから入手できます

"ダブルクリック"を聞く、またはダブルタップするには、 UIViewをサブクラス化し、そのサブクラスのインスタンスをView Controllerのviewプロパティにします。

ビューのサブクラスで、その-touchesEnded:withEvent:メソッドをオーバーライドし、2つの連続したタップの間の時間を測定することによって、時間の経過中に取得するタッチの数をカウントします(おそらく-timeIntervalSinceDate: 。 または[touch tapCount]結果をテストします。

2つのタップを取得した場合、サブクラス化されたビューは、ビューコントローラが聴取するために登録したNSNotificationを発行します。

ビューコントローラが通知をisHiddenバーのisHiddenプロパティを読み取ってアクセスされるナビゲーションバーの現在の可視状態に応じて、前述のコードを使用してナビゲーションバーを非表示または表示するセレクタをisHiddenます。

EDIT

タップイベントを処理するための私の答えの一部は、おそらくiOS 3.1より前に役立つでしょう。 UIGestureRecognizerクラスはおそらくダブルタップを処理するためのより良いアプローチです。

EDIT 2

ナビゲーションバーを非表示にするスウィフトの方法は次のとおりです。

self.navigationController?.setNavigationBarHidden(true, animated: true)

それを表示するには:

self.navigationController?.setNavigationBarHidden(false, animated: true)

まず、「View Controllerプログラミングガイド」の「ナビゲーションビューの全画面レイアウトの採用」とカスタムビューの同じセクションについてのセクションを読んでください。 Photos.appのようなことをしようとしているなら、おそらくスクロールビューを使用しているでしょう。 スクロールビューのcontentInsetプロパティを直後にゼロ(UIEdgeInsetsZero)に戻す必要があるように、ナビゲーションバーがスクロールコンテンツのインセットをスクロールビューに自動的に追加してナビゲーションバー(およびステータスバー)の高さを考慮するコメントに注意してくださいナビゲーションバーの初期状態を設定し、ビューが表示される前に設定します。

次に、ナビゲーションバーやステータスバーを表示/非表示に切り替えるタップが1つある場合は、メソッドを切り替える際に2つの操作を行う必要があります。 最初は、NavigationBar隠しプロパティを変更する前にスクロールビューのcontentOffsetプロパティを保存し、保存された値を直後にcontentOffsetに復元することが考えられます。 また、navigationBarHiddenプロパティを変更した後、contentInsetプロパティをUIEdgeInsetsZeroにもう一度ゼロにします。 また、ステータスバーを切り替える場合は、ナビゲーションバーの状態を変更する前にステータスバーを変更する必要があります。





uinavigationbar