web-dev-qa-db-ja.com

デバイスをタップしたときにステータスバーとナビゲーションバーを非表示にする方法

IPhoneの写真のようにデバイスをタップしたときにステータスバーとナビゲーションバーを非表示にする方法使っていた

UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.Slide)

しかし、それは機能していません。

編集:ステータスバーとナビゲーションバーを非表示にしたいのですが、永久に非表示にしたくないのです。

25
Aditya Dharma

Swift 5およびiOS 12では、必要に応じて、問題を解決するために次の3つのコードスニペットのいずれかを選択できます。


#1。 UINavigationControllerhidesBarsOnTapプロパティ+ UIViewControllerprefersStatusBarHiddenおよびpreferredStatusBarUpdateAnimationプロパティの使用

IOS 8以降、UINavigationControllerにはhidesBarsOnTapプロパティがあります。 hidesBarsOnTapには次の 宣言 があります。

_var hidesBarsOnTap: Bool { get set }
_

Navigation Controllerがタップジェスチャを使用してバーの非表示を許可するかどうかを示すブール値。

AppleはhidesBarsOnTapについても述べています:

このプロパティの値がtrueの場合、Navigation Controllerは、コンテンツ領域の未処理のタップに応じて、Navigationバーとツールバーの非表示と表示を切り替えます。このプロパティのデフォルト値はfalseです。

次のコードは、hidesBarsOnTapを実装する方法を示しています。

_import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        navigationController?.hidesBarsOnTap = true
    }

    override var prefersStatusBarHidden: Bool {
        return navigationController?.isNavigationBarHidden == true
    }

    override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
        return UIStatusBarAnimation.slide
    }

}
_

#2。 UINavigationControllersetNavigationBarHidden(_:animated:)メソッド+ UIViewControllerprefersStatusBarHiddenおよびpreferredStatusBarUpdateAnimationプロパティとUIButtonの使用

UINavigationControllerにはsetNavigationBarHidden(_:animated:)というメソッドがあります。 setNavigationBarHidden(_:animated:)には次の 宣言 があります。

_func setNavigationBarHidden(_ hidden: Bool, animated: Bool)
_

ナビゲーションバーを非表示にするかどうかを設定します。

次のコードは、ストーリーボードでUIButtonを設定し、_@IBAction_にリンクしたsetNavigationBarHidden(_:animated:)を使用して、ステータスバーとナビゲーションバーを切り替える方法を示しています。

_import UIKit

class ViewController: UIViewController {

    // Link this @IBAction to a `UIButton`
    @IBAction func toggle(_ sender: UIButton) {
        navigationController?.setNavigationBarHidden(navigationController?.isNavigationBarHidden == false, animated: true)
    }

    override var prefersStatusBarHidden: Bool {
        return navigationController?.isNavigationBarHidden == true
    }

    override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
        return UIStatusBarAnimation.slide
    }

}
_

#3。 UINavigationControllersetNavigationBarHidden(_:animated:)メソッド+ UIViewControllerprefersStatusBarHiddenおよびpreferredStatusBarUpdateAnimationプロパティとUIGestureRecognizerの使用

前のコードの代替として、UIGestureRecognizerの代わりにUIButtonとともにsetNavigationBarHidden(_:animated:)を使用できます。

_import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let gesture = UITapGestureRecognizer(target: self, action: #selector(ViewController.toggle))
        view.isUserInteractionEnabled = true
        view.addGestureRecognizer(gesture)
    }

    @objc func toggle() {
        navigationController?.setNavigationBarHidden(navigationController?.isNavigationBarHidden == false, animated: true)
    }

    override var prefersStatusBarHidden: Bool {
        return navigationController?.isNavigationBarHidden == true
    }

    override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
        return UIStatusBarAnimation.slide
    }

}
_

  • プロジェクトのInfo.plistUIViewControllerBasedStatusBarAppearancetrueに設定されていることを確認してください。仕事。
  • IOS 10をターゲットにする必要がある場合は、こちらをご覧ください 同様の質問に対する回答 .
112
Imanou Petit

IOS 8以降では、単に hidesBarsOnTap を使用できます。

    navigationController?.hidesBarsOnTap = true
0
Cooliopas