2012-11-12 3 views
7

stavo usando il seguente codice per rendere la mia barra di navigazione trasparente in iOS5:Impossibile effettuare barra di navigazione totalmente trasparente in iOS6

const float colorMask[6] = {222, 255, 222, 255, 222, 255}; 
UIImage *img = [[UIImage alloc] init]; 
UIImage *maskedImage = [UIImage imageWithCGImage: CGImageCreateWithMaskingColors(img.CGImage, colorMask)]; 
[self.navigationController.navigationBar setBackgroundImage:maskedImage forBarMetrics:UIBarMetricsDefault]; 

l'aggiornamento a iOS6 e la barra di navigazione è ancora trasparente, ma ora ha un sottile nero linea sotto di esso. Come posso rendere la barra di navigazione totalmente trasparente?

Ho anche provato tutti i seguenti:

self.navigationController.navigationBar.translucent = YES; 
self.navigationController.navigationBar.opaque = YES; 
self.navigationController.navigationBar.tintColor = [UIColor clearColor]; 
self.navigationController.navigationBar.backgroundColor = [UIColor clearColor]; 
[self.navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault]; 
[self.navigationController.navigationBar setBarStyle:UIBarStyleBlackTranslucent]; 
[[UINavigationBar appearance] setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault]; 

Grazie in anticipo.

+0

E 'possibile che la maschera immagine non è completamente prendendo l'altezza della barra, questo lasciando uno "spazio" nero in cui il vostro UINavigationBar non abbastanza venire a filo con la vista? – CodaFi

+0

Risolto. iOS6 ha aggiunto un'ombra esterna alla barra di navigazione. Quindi il codice di mascheramento che stavo usando con iOS5 funziona ancora bene - Devo solo aggiungere if ([self.navigationController.navigationBar risponde a ToSelector: @selector (shadowImage)]) { [self.navigationController.navigationBar setShadowImage: [[UIImage alloc ] dentro]]; } per eliminare l'ombra esterna. –

risposta

6

Risolto. iOS6 ha aggiunto un'ombra esterna alla barra di navigazione. Quindi il codice di mascheramento che stavo usando con iOS5 funziona ancora bene - ho solo bisogno di aggiungere

if ([self.navigationController.navigationBar respondsToSelector:@selector(shadowImage)]) 
{ 
[self.navigationController.navigationBar setShadowImage:[[UIImage alloc] init]]; 
} 

per sbarazzarsi dell'ombra esterna.

1
if ([self.navigationController.navigationBar respondsToSelector:@selector(shadowImage)])   
{ 
    [self.navigationController.navigationBar setShadowImage:[[[UIImage alloc] init] autorelease]]; 
    // autorelease is necessary, or else [[UIImage alloc] init]'s retainCount is 2. 
} 
2
self.navigationController.navigationBar.translucent = YES; // Setting this slides the view up, underneath the nav bar (otherwise it'll appear black) 
    const float colorMask[6] = {222, 255, 222, 255, 222, 255}; 
    UIImage *img = [[UIImage alloc] init]; 
    UIImage *maskedImage = [UIImage imageWithCGImage: CGImageCreateWithMaskingColors(img.CGImage, colorMask)]; 

    [self.navigationController.navigationBar setBackgroundImage:maskedImage forBarMetrics:UIBarMetricsDefault]; 
//remove shadow 
    [[UINavigationBar appearance] setShadowImage: [[UIImage alloc] init]];