web-dev-qa-db-ja.com

setStatusBarHiddenはiOS 9.0で非推奨になりました

コードをiOS 8からiOS 9にアップグレードしています。プログラムにコードスニペットがあります[[UIApplication applicationName] setStatusBarHidden:YES];

「setStatusBarHiddenはiOS 9.0で非推奨になりました。-[UIViewController prefersStatusBarHidden」を使用してください」という警告が表示されます。 「setStatusBarHidden」を「prefersStatusBarHidden」に置き換えると、「instance method not found」が得られます。誰かがこの問題を解決する方法を教えてもらえますか?

39
iOS_programmer

以下のコードをView Controllerに追加してください。

 - (BOOL)prefersStatusBarHidden {

   return NO;
}

注:

  • このメソッドの戻り値を変更する場合は、setNeedsStatusBarAppearanceUpdateメソッドを呼び出します。
  • ChildViewControllerの場合、子View Controllerが優先ステータスバーの非表示/非表示状態を制御するように指定するには、childViewControllerForStatusBarHiddenメソッドを実装します。
50
Nilesh Patel

prefersStatusBarHidden はiOS 7以降で利用可能です。

UIViewControllerクラスでこれを使用します

   var isHidden = true{
        didSet{
            self.setNeedsStatusBarAppearanceUpdate()
        }
    }
    override var prefersStatusBarHidden: Bool {
        return isHidden
    }

enter image description here

このメソッドの戻り値を変更する場合は、setNeedsStatusBarAppearanceUpdate()メソッドを呼び出します。子View Controllerが優先ステータスバーの非表示/非表示状態を制御するように指定するには、childViewControllerForStatusBarHiddenメソッドを実装します。

5
Jack

yourViewController.mにメソッドを追加する必要があります

- (BOOL)prefersStatusBarHidden {

   return NO;
}
4
Gaurav Patel

Swift 3 with Xcode 8.3.3

1)Info.plistに行を追加します。 enter image description here

2)ViewController ViewDidLoad()オーバーライドで以下を追加します:

 UIApplication.shared.isStatusBarHidden = true
2
Satnam Sync

Swift 3.1 Xcode 8.2.1

  1. Info.plistの行View Controllerベースのステータスバーの外観を変更し、NOに設定します

  2. ターゲット設定で「ステータスバーを隠す」にチェックマークを付けます

両方の手順が必要です

2
Adam Smaka

ここに私のSwift=ステータスバーの非表示とスタイルを設定するためのコードがあります。

extension UIViewController {

public var privateStatusBarHidden: Bool {
    return statusBarHidden
}

public var privateStatusBarStyle: UIStatusBarStyle {
    return statusBarStyle
}

public func setStatusBarHidden(hidden: Bool, animated: Bool = false) {
    statusBarHidden = hidden
    if animated {
        UIView.animate(withDuration: 0.25, animations: { 
            self.setNeedsStatusBarAppearanceUpdate()
        })
    } else {
        self.setNeedsStatusBarAppearanceUpdate()
    }
}

public func setStatusBar(style: UIStatusBarStyle) {
    statusBarStyle = style
    self.setNeedsStatusBarAppearanceUpdate()
}

    public static func swizzleStatusBarHiddenPropertyForViewController() {
    var original = class_getInstanceMethod(UIViewController.self, #selector(getter: UIViewController.prefersStatusBarHidden))
    var changeling = class_getInstanceMethod(UIViewController.self, #selector(getter: UIViewController.privateStatusBarHidden))
    method_exchangeImplementations(original, changeling)
    original = class_getInstanceMethod(UIViewController.self, #selector(getter: UIViewController.preferredStatusBarStyle))
    changeling = class_getInstanceMethod(UIViewController.self, #selector(getter: UIViewController.privateStatusBarStyle))
    method_exchangeImplementations(original, changeling)

    original = class_getClassMethod(UIViewController.self, #selector(UIViewController.swizzleStatusBarHiddenPropertyForViewController))
    changeling = class_getClassMethod(UIViewController.self, #selector(UIViewController.emptyFunction))
    method_exchangeImplementations(original, changeling)
}

@objc private static func emptyFunction() {}
}

使用法

  • ラウチング機能

UIViewController.swizzleStatusBarHiddenPropertyForViewController()

  • uIViewControllerのstatusBarの非表示/表示用

。 self.setStatusBar(非表示:true/false)

1
Jay Choi