ACTUALIZACIÓN DE iOS 7.1 : Parece que la solución para modificar el canal alfa en UINavigationBar se ha ignorado en esta actualización. En este momento, la mejor solución parece ser 'lidiar con eso' y esperar que cualquier color que elija pueda producir un efecto translúcido. Todavía estoy buscando formas de evitar esto.
ACTUALIZACIÓN DE iOS 7.0.3 : La biblioteca de GitHub que creamos se actualizó para solucionar este problema cuando se usa iOS 7.0.3. Desafortunadamente, no existe una fórmula mágica para admitir ambos colores creados en iOS 7.0.2 y versiones anteriores e iOS 7.0.3. Parece que Apple mejoró la saturación, pero a costa de la opacidad (ya que la translucidez borrosa depende del nivel de opacidad). Yo, junto con algunos otros, estoy trabajando para crear una solución mucho mejor para esto.
Estoy seguro de que muchas personas ya se han encontrado con el problema de que iOS 7 tiende a desaturar el color de un UINavigationBar que es translúcido.
Mi objetivo es lograr una UINavigationBar con este color de tinte, pero translúcido:
Sin embargo, con translucidez, estoy entendiendo esto. La vista de fondo es blanca, lo que entiendo hará que esta vista sea un poco más clara:
¿Hay alguna forma de lograr el color original sin dejar de ser translúcido? Me di cuenta de que Facebook ha podido hacer que su barra tenga su rico color azul, como se muestra aquí:
..so sé que tiene que haber alguna manera. Las vistas de fondo obviamente marcan la diferencia aquí, pero la mayor parte de su contenido también es gris / blanco. Parece que independientemente del color de tinte de barra que coloque, no puede obtener colores vivos bajo translucidez.
Actualizado con solución.
Aquí está la solución que terminé ideando. Tomé aprato solución 's y luego abarcado la costumbre UINavigationBar
dentro de una UINavigationController
subclase. He creado un repositorio que tiene esta implementación enumerada a continuación, junto con una aplicación de ejemplo .
////////////////////////////
// CRNavigationBar.m
////////////////////////////
#import "CRNavigationBar.h"
@interface CRNavigationBar ()
@property (nonatomic, strong) CALayer *colorLayer;
@end
@implementation CRNavigationBar
static CGFloat const kDefaultColorLayerOpacity = 0.5f;
static CGFloat const kSpaceToCoverStatusBars = 20.0f;
- (void)setBarTintColor:(UIColor *)barTintColor {
[super setBarTintColor:barTintColor];
if (self.colorLayer == nil) {
self.colorLayer = [CALayer layer];
self.colorLayer.opacity = kDefaultColorLayerOpacity;
[self.layer addSublayer:self.colorLayer];
}
self.colorLayer.backgroundColor = barTintColor.CGColor;
}
- (void)layoutSubviews {
[super layoutSubviews];
if (self.colorLayer != nil) {
self.colorLayer.frame = CGRectMake(0, 0 - kSpaceToCoverStatusBars, CGRectGetWidth(self.bounds), CGRectGetHeight(self.bounds) + kSpaceToCoverStatusBars);
[self.layer insertSublayer:self.colorLayer atIndex:1];
}
}
@end
////////////////////////////
// CRNavigationController.m
////////////////////////////
#import "CRNavigationController.h"
#import "CRNavigationBar.h"
@interface CRNavigationController ()
@end
@implementation CRNavigationController
- (id)init {
self = [super initWithNavigationBarClass:[CRNavigationBar class] toolbarClass:nil];
if(self) {
// Custom initialization here, if needed.
}
return self;
}
- (id)initWithRootViewController:(UIViewController *)rootViewController {
self = [super initWithNavigationBarClass:[CRNavigationBar class] toolbarClass:nil];
if(self) {
self.viewControllers = @[rootViewController];
}
return self;
}
@end
UINavigationBar
mejor manera posible cuando se expone a la translucidez en iOS 7.
UINAvigationBar
opaco Facebook iOS7 ?