tutorial ios cocoa-touch

tutorial - iOS 7 y posterior: establece el estilo de barra de estado por controlador de vista



cocoa touch tutorial (9)

¿Has probado esto?

  1. Establezca "Ver apariencia de barra de estado basada en controlador" ( UIViewControllerBasedStatusBarAppearance ) en YES en su Info.plist. ( YES es el valor predeterminado, por lo que también puede dejar este valor fuera de su lista).

  2. En su método viewDidLoad, llame [self setNeedsStatusBarAppearanceUpdate] .

  3. Implemente preferredStatusBarStyle , devolviendo el estilo de barra de estado que desea para este controlador de vista.

    - (UIStatusBarStyle) preferredStatusBarStyle { return UIStatusBarStyleLightContent; }


Intenté muchas formas de configurar el estilo de la barra de estado (por defecto o lightcontent) pero no puedo hacer que funcione en base a controlador de vista. Puedo configurar el estilo de la barra de estado solo para toda la aplicación.

¿Alguien tiene una pista?

Intenté UIViewControllerBasedStatusBarAppearance

y

-(UIStatusBarStyle)preferredStatusBarStyle{ return UIStatusBarStyleLightContent; }

pero estos métodos no funcionan.


Apuesto a que tiene su controlador de vista incrustado en un controlador de navegación. Para evitar establecer el estilo de la barra de navegación en .Black use esta subclase:

class YourNavigationController: UINavigationController { override func childViewControllerForStatusBarStyle() -> UIViewController? { return topViewController } }


En Swift, pude hacer esto escribiendo:

let tbc : UITabBarController = self.window?.rootViewController as UITabBarController var moreViewController : UINavigationController = tbc.moreNavigationController moreViewController.navigationBar.barStyle = UIBarStyle.Black

Básicamente, estás interesado en la última línea.
Esto dio como resultado el cambio de tabbar a blanco:

Tenga en cuenta que no Info.plist nada en Info.plist para lograr este resultado.
Para obtener más información sobre cómo cambiar la Navigation Status Bar , consulte este enlace: http://www.appcoda.com/customize-navigation-status-bar-ios-7/


En el ViewController que desea cambiar el color de la barra de estado

- (void) viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault]; } - (void) viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated]; [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; }


En el método viewDidLoad, pon esto:

C objetivo

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; [self setNeedsStatusBarAppearanceUpdate];

Rápido

UIApplication.shared.statusBarStyle = .lightContent self.setNeedsStatusBarAppearanceUpdate()


Hay una trampa aquí si su controlador de vista está dentro de UINavigationController independiente y no forma parte de UINavigationController basado en Storyboard y, por encima de todos los métodos, falla. Me encontré con esta situación y luego con el fin de establecer la barra de estado al estilo de luz que utilicé a continuación

[self.navigationController.navigationBar setBarStyle:UIBarStyleBlack];

Esto funcionó perfectamente para mí.


Swift extensión para esto porque siempre me olvido cómo funciona esto

extension UIViewController { // utility to set the status bar appearance // Note: Make sure "View controller-based status bar appearance" is set to NO in your target settings or this won''t work func setStatusBarForDarkBackground(dark: Bool) { UIApplication.sharedApplication().statusBarStyle = dark ? .LightContent : .Default setNeedsStatusBarAppearanceUpdate() } }


EDIT: esta solución está en desuso en iOS 9. Elija una de las otras respuestas.

Con UIViewControllerBasedStatusBarAppearance establecido en NO, pude establecer el estilo en texto blanco usando:

[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleBlackTranslucent;

Esto se debe a que el color del texto en este estilo era blanco en iOS 6 y versiones inferiores.

ACTUALIZACIÓN: según @jowie puedes probarlo en iOS8:

[UIApplication sharedApplication].statusBarStyle = UIBarStyleBlack;


Rápido:

let tbc : UITabBarController = self.window?.rootViewController as UITabBarController var moreViewController : UINavigationController = tbc.moreNavigationController moreViewController.navigationBar.barStyle = UIBarStyle.Black

C objetivo:

añada esto al método view.idLoad del archivo controller.m:

[self setNeedsStatusBarAppearanceUpdate].

luego implemente este método en ese mismo archivo controller.m :

- (UIStatusBarStyle) preferredStatusBarStyle { return UIStatusBarStyleLightContent; }

Documentos oficiales:

https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/TransitionGuide/Bars.html

Artículo destacado:

http://www.ryadel.com/2015/03/04/xcode-set-status-bar-style-and-color-in-objective-c/