tutorial - iOS 7 y posterior: establece el estilo de barra de estado por controlador de vista
cocoa touch tutorial (9)
¿Has probado esto?
Establezca "Ver apariencia de barra de estado basada en controlador" (
UIViewControllerBasedStatusBarAppearance
) enYES
en su Info.plist. (YES
es el valor predeterminado, por lo que también puede dejar este valor fuera de su lista).En su método viewDidLoad, llame
[self setNeedsStatusBarAppearanceUpdate]
.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:
Artículo destacado:
http://www.ryadel.com/2015/03/04/xcode-set-status-bar-style-and-color-in-objective-c/