Cómo hacer que la barra de navegación sea borrosa y translúcida en iOS 7
En mi subclase UINavigationController, configuré la barra de navegación para que sea semitransparente:
- (id)initWithRootViewController:(UIViewController *)rootViewController
{
if (self = [super initWithRootViewController:rootViewController]) {
self.navigationBar.translucent = YES;
}
return self;
}
Color de tinte
En mi subclase UIApplicationDelegate, configuro el color de la barra de navegación. Descubrí que el alfa del color del tinte no hizo ninguna diferencia. Es decir, usar alpha 0.1 no hace que la barra de navegación se vuelva más translúcida.
- (BOOL)aplicación:(UIApplication *)aplicación didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[[ UINavigationBar apariencia] setTintColor: [UIColor greenColor ]];
}
Borde
En mi controlador de vista de contenido estableceré el borde en UIRectEdgeNone para que la barra de navegación superior no se corte en pedazos. Si uso el UIRectEdgeAll predeterminado, la barra de navegación cubrirá permanentemente la parte superior del contenido. Incluso si acepto esta excepción, UIRectEdgeAll todavía no logra habilitar la translucidez.
- (nulo) viewDidLoad
{
[super viewDidLoad];
self.edgesForExtendedLayout = UIRectEdgeNone;
}
Editar: Experimentando con Edges
El problema publicitario señalado por @rmaddy en los comentarios puede estar relacionado con bordesForExtendedLayout. Encontré un tutorial completo sobre bordesForExtendedLayout y traté de implementarlo:
- (void) viewDidLoad
{
[super viewDidLoad];
self.edgesForExtendedLayout = UIRectEdgeAll;
self.automaticallyAdjustsScrollViewInsets = YES;
self.extendedLayoutIncludesOpaqueBars = NO;
}
no entra en acción. En primer lugar, aquí no se produce ningún efecto de translucidez. En segundo lugar, se cortó la parte superior de mi contenido. En el código anterior y en la página de ejemplo a continuación, el "avatar" se compone inicialmente de la barra de navegación y es difícil desplazarse hacia abajo. Puedes bajar y ver el avatar en la parte superior, pero cuando lo sueltas, aparece la página y el avatar se oscurece nuevamente.
Solución 1:
Este problema se debe a la vista de actualización desplegable de terceros EGORefreshTableHeaderView, que comúnmente utiliza el control de actualización del sistema de introducción de iOS 6 anterior.
Esta vista hace que iOS 7 piense que el contenido es más alto de lo que realmente es, generando confusión. En iOS 6 y 7, usé condicionalmente UIRefreshControl. Puedo usar UIRectEdgeAll para hacer desaparecer el contenido debajo de la barra de navegación. Finalmente, muestre la barra de navegación con un alfa inferior para obtener un efecto translúcido en el mapa de tonos. extendLayoutIncludesOpaqueBars = NO;
[[apariencia de UINavigationBar] setTintColor:[UIColor colorWithWhite:0.0 alpha:0.5]];