iOS 9.0 中不推荐使用 setStatusBarHidden
setStatusBarHidden is deprecated in iOS 9.0
我正在将我的代码从 iOS 8 升级到 iOS 9。我的程序中有一个代码片段
[[UIApplication applicationName] setStatusBarHidden:YES];
.
我收到警告 "setStatusBarHidden is deprecated in iOS 9.0, Use -[UIViewController prefersStatusBarHidden"。如果我只是将 'setStatusBarHidden' 替换为 'prefersStatusBarHidden',我会得到 'instance method not found'。
有人可以建议我如何解决这个问题吗?
您必须在 yourViewController.m
中添加方法
- (BOOL)prefersStatusBarHidden {
return NO;
}
将以下代码添加到您的视图控制器中。
- (BOOL)prefersStatusBarHidden {
return NO;
}
注:
- 如果更改此方法的 return 值,请调用
setNeedsStatusBarAppearanceUpdate
方法。
- 对于childViewController,指定一个子视图控制器
应该控制首选状态栏 hidden/unhidden 状态,实现
childViewControllerForStatusBarHidden
方法。
这是我的 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()
- 用于 hide/show statusBar,在 UIViewController
。 self.setStatusBar(隐藏:true/false)
Swift 3.1 Xcode 8.2.1
更改info.plist行View controller-based status bar appearance并将其设置为NO
在您的目标设置中勾选 "Hide Status bar"
两个步骤都需要
Swift 3 与 Xcode 8.3.3
1) 加一行在你Info.plist。
2) 在您的 ViewController ViewDidLoad() 重写中添加:
UIApplication.shared.isStatusBarHidden = true
prefersStatusBarHidden 可从 iOS 7+.
在您的 UIViewController
class
中使用它
var isHidden = true{
didSet{
self.setNeedsStatusBarAppearanceUpdate()
}
}
override var prefersStatusBarHidden: Bool {
return isHidden
}
If you change the return value for this method, call the
setNeedsStatusBarAppearanceUpdate() method. To specify that a child
view controller should control preferred status bar hidden/unhidden
state, implement the childViewControllerForStatusBarHidden method.
我正在将我的代码从 iOS 8 升级到 iOS 9。我的程序中有一个代码片段
[[UIApplication applicationName] setStatusBarHidden:YES];
.
我收到警告 "setStatusBarHidden is deprecated in iOS 9.0, Use -[UIViewController prefersStatusBarHidden"。如果我只是将 'setStatusBarHidden' 替换为 'prefersStatusBarHidden',我会得到 'instance method not found'。 有人可以建议我如何解决这个问题吗?
您必须在 yourViewController.m
中添加方法- (BOOL)prefersStatusBarHidden {
return NO;
}
将以下代码添加到您的视图控制器中。
- (BOOL)prefersStatusBarHidden {
return NO;
}
注:
- 如果更改此方法的 return 值,请调用
setNeedsStatusBarAppearanceUpdate
方法。 - 对于childViewController,指定一个子视图控制器
应该控制首选状态栏 hidden/unhidden 状态,实现
childViewControllerForStatusBarHidden
方法。
这是我的 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()
- 用于 hide/show statusBar,在 UIViewController
。 self.setStatusBar(隐藏:true/false)
Swift 3.1 Xcode 8.2.1
更改info.plist行View controller-based status bar appearance并将其设置为NO
在您的目标设置中勾选 "Hide Status bar"
两个步骤都需要
Swift 3 与 Xcode 8.3.3
1) 加一行在你Info.plist。
2) 在您的 ViewController ViewDidLoad() 重写中添加:
UIApplication.shared.isStatusBarHidden = true
prefersStatusBarHidden 可从 iOS 7+.
在您的 UIViewController
class
var isHidden = true{
didSet{
self.setNeedsStatusBarAppearanceUpdate()
}
}
override var prefersStatusBarHidden: Bool {
return isHidden
}
If you change the return value for this method, call the setNeedsStatusBarAppearanceUpdate() method. To specify that a child view controller should control preferred status bar hidden/unhidden state, implement the childViewControllerForStatusBarHidden method.