objective c - setStatusBarHidden está en desuso en iOS 9.0
objective-c ios9 (7)
Estoy actualizando mi código de iOS 8 a iOS 9. Tengo un fragmento de código en mi programa [[UIApplication applicationName] setStatusBarHidden:YES];
.
Recibo la advertencia "setStatusBarHidden está en desuso en iOS 9.0, Use - [UIViewController prefersStatusBarHidden". Si acabo de reemplazar ''setStatusBarHidden'' con ''prefersStatusBarHidden'', obtengo ''método de instancia no encontrado''. ¿Puede alguien sugerirme por favor cómo resolver este problema?
Agregue el código siguiente a su controlador de vista.
- (BOOL)prefersStatusBarHidden {
return NO;
}
Nota :
- Si cambia el valor de retorno para este método, llame al método
setNeedsStatusBarAppearanceUpdate
. - Para childViewController, para especificar que un controlador de vista secundario debe controlar el estado oculto / no oculto de la barra de estado preferida, implemente el método
childViewControllerForStatusBarHidden
.
Aquí está mi código rápido para establecer la barra de estado oculta y el estilo.
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() {}
}
Uso
- en función de lanzamiento
UIViewController.swizzleStatusBarHiddenPropertyForViewController ()
- para hide / show statusBar, en UIViewController
. self.setStatusBar (oculto: verdadero / falso)
La solución prefersStatusBarHidden
no funcionó.
Lo que funcionó fue en lugar de
UIApplication.sharedApplication.statusBarHidden=YES;
solía
@property(readwrite, nonatomic,getter=isStatusBarHidden) BOOL statusBarHidden
Sin embargo, tenga en cuenta que
UIApplication.shared.isStatusBarHidden = true
es obsoleto
tienes que agregar el método en tuViewController.m
- (BOOL)prefersStatusBarHidden {
return NO;
}
prefersStatusBarHidden está disponible desde iOS 7+.
Use esto en su clase UIViewController
[[UIApplication applicationName] setStatusBarHidden:YES];
Si cambia el valor de retorno para este método, llame al método setNeedsStatusBarAppearanceUpdate (). Para especificar que un controlador de vista secundario debe controlar el estado oculto / no oculto de la barra de estado preferida, implemente el método childViewControllerForStatusBarHidden.
Swift 3.1 Xcode 8.2.1
Cambie en info.plist el aspecto de la barra de estado basado en el controlador de la vista de la fila y establezca en NO
En la configuración de destino, marque "Ocultar barra de estado"
Ambos pasos son requeridos