objective-c ios9

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 con Xcode 8.3.3

1) Agregue una fila en su Info.plist.

2) En su anulación ViewDtrLoad () de ViewController agregar:

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


Swift 3.1 Xcode 8.2.1

  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

  2. En la configuración de destino, marque "Ocultar barra de estado"

Ambos pasos son requeridos