コードをiOS 8からiOS 9にアップグレードしています。プログラムにコードスニペットがあります[[UIApplication applicationName] setStatusBarHidden:YES];
。
「setStatusBarHiddenはiOS 9.0で非推奨になりました。-[UIViewController prefersStatusBarHidden」を使用してください」という警告が表示されます。 「setStatusBarHidden」を「prefersStatusBarHidden」に置き換えると、「instance method not found」が得られます。誰かがこの問題を解決する方法を教えてもらえますか?
以下のコードをView Controllerに追加してください。
- (BOOL)prefersStatusBarHidden {
return NO;
}
注:
setNeedsStatusBarAppearanceUpdate
メソッドを呼び出します。childViewControllerForStatusBarHidden
メソッドを実装します。prefersStatusBarHidden はiOS 7以降で利用可能です。
UIViewController
クラスでこれを使用します
var isHidden = true{
didSet{
self.setNeedsStatusBarAppearanceUpdate()
}
}
override var prefersStatusBarHidden: Bool {
return isHidden
}
このメソッドの戻り値を変更する場合は、setNeedsStatusBarAppearanceUpdate()メソッドを呼び出します。子View Controllerが優先ステータスバーの非表示/非表示状態を制御するように指定するには、childViewControllerForStatusBarHiddenメソッドを実装します。
yourViewController.mにメソッドを追加する必要があります
- (BOOL)prefersStatusBarHidden {
return NO;
}
Swift 3.1 Xcode 8.2.1
Info.plistの行View Controllerベースのステータスバーの外観を変更し、NOに設定します
ターゲット設定で「ステータスバーを隠す」にチェックマークを付けます
両方の手順が必要です
ここに私の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()
。 self.setStatusBar(非表示:true/false)