transparente reloj quitar pantalla estado desaparece como bloqueo barra cocoa-touch uinavigationbar transparency translucency

cocoa touch - reloj - Cómo hacer una barra de navegación completamente transparente en iOS 7



dock transparente en ios 11 (7)

Quiero que UINavigationBar en mi aplicación sea completamente transparente y esté alineado con viewcontroller directamente debajo de él. Sin embargo, el único código que pude encontrar lo hace translúcido pero no transparente. Sé que esto se puede hacer en iOS 7 porque se usa en la aplicación de notas. Mi pregunta es, ¿cuál es el código que solían usar?


Alan olvidó una línea

self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];

Así que tengo:

[self.navigationController.navigationBar setTranslucent:YES]; self.navigationController.view.backgroundColor = [UIColor clearColor]; [self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault]; self.navigationController.navigationBar.shadowImage = [[UIImage alloc] init]; self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];


De esta respuesta

[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; self.navigationController.navigationBar.shadowImage = [UIImage new]; self.navigationController.navigationBar.translucent = YES; self.navigationController.view.backgroundColor = [UIColor clearColor]; self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];

Además, como lo sugirió Josh en los comentarios, para volver a poner la barra en default:

[self.navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];


La gran respuesta de @Zorayr revisada para Swift 3:

import Foundation import UIKit extension UINavigationController { public func presentTransparentNavigationBar() { navigationBar.setBackgroundImage(UIImage(), for:.default) navigationBar.isTranslucent = true navigationBar.shadowImage = UIImage() setNavigationBarHidden(false, animated:true) } public func hideTransparentNavigationBar() { setNavigationBarHidden(true, animated:false) navigationBar.setBackgroundImage(UINavigationBar.appearance().backgroundImage(for: UIBarMetrics.default), for:.default) navigationBar.isTranslucent = UINavigationBar.appearance().isTranslucent navigationBar.shadowImage = UINavigationBar.appearance().shadowImage } }


Solución autónoma como categoría Objective-C:

UINavigationController + TransparentNavigationController.h

@interface UINavigationController (TransparentNavigationController) - (void)presentTransparentNavigationBar; - (void)hideTransparentNavigationBar; @end

UINavigationController + TransparentNavigationController.m

#import "UINavigationController+TransparentNavigationController.h" @implementation UINavigationController (TransparentNavigationController) - (void)presentTransparentNavigationBar { [self.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; [self.navigationBar setTranslucent:YES]; [self.navigationBar setShadowImage:[UIImage new]]; [self setNavigationBarHidden:NO animated:YES]; } - (void)hideTransparentNavigationBar { [self setNavigationBarHidden:YES animated:NO]; [self.navigationBar setBackgroundImage:[[UINavigationBar appearance] backgroundImageForBarMetrics:UIBarMetricsDefault] forBarMetrics:UIBarMetricsDefault]; [self.navigationBar setTranslucent:[[UINavigationBar appearance] isTranslucent]]; [self.navigationBar setShadowImage:[[UINavigationBar appearance] shadowImage]]; } @end

Ahora puede importar la categoría en su UIViewController y llamar a los métodos en su controlador de navegación, por ejemplo:

#import "UINavigationController+TransparentNavigationController.h" - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.navigationController presentTransparentNavigationBar]; } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; [self.navigationController hideTransparentNavigationBar]; }

Y una solución similar en Swift :

import Foundation import UIKit extension UINavigationController { public func presentTransparentNavigationBar() { navigationBar.setBackgroundImage(UIImage(), forBarMetrics:UIBarMetrics.Default) navigationBar.translucent = true navigationBar.shadowImage = UIImage() setNavigationBarHidden(false, animated:true) } public func hideTransparentNavigationBar() { setNavigationBarHidden(true, animated:false) navigationBar.setBackgroundImage(UINavigationBar.appearance().backgroundImageForBarMetrics(UIBarMetrics.Default), forBarMetrics:UIBarMetrics.Default) navigationBar.translucent = UINavigationBar.appearance().translucent navigationBar.shadowImage = UINavigationBar.appearance().shadowImage } }


Use UINavigationBar+Addition pod, luego simplemente llame a:

UINavigationBar *navigationBar = self.navigationController.navigationBar; [navigationBar makeTransparent];


[(UIView *) [self.navigationController.navigationBar.subviews objectAtIndex: 0] setAlpha: 0.0f];

Esa línea parecía funcionar perfectamente para mí


Para Swift3 y Swift4

self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default) self.navigationController?.navigationBar.shadowImage = UIImage() self.navigationController?.navigationBar.isTranslucent = true

Para Swift2.2

self.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default) self.navigationController?.navigationBar.shadowImage = UIImage() self.navigationController?.navigationBar.translucent = true

Para Objective-C

[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; self.navigationController.navigationBar.shadowImage = [UIImage new]; self.navigationController.navigationBar.translucent = YES;