2015-12-08 14 views
8

enter image description hereCome aggiungere un effetto ombra per UINavigation bar

Ciao, voglio aggiungere questo tipo di ombra per il mio NAvigationBar Come posso farlo.

Ecco come ho cercato di aggiungere ombra.

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

self.navigationController.navigationBar.translucent=YES; 

self.navigationController.navigationBar.topItem.titleView.tintColor=[UIColor whiteColor]; 
self.navigationController.navigationBar.titleTextAttributes=[NSDictionary dictionaryWithObject:[UIFont fontWithName:@"HelveticaNeue" size:15.0f] forKey:NSFontAttributeName]; 
self.navigationController.navigationBar.topItem.title=strNavigtionTitle; 
self.navigationController.navigationBar.titleTextAttributes = [NSDictionary dictionaryWithObject:[UIColor whiteColor] forKey:NSForegroundColorAttributeName]; 
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"backarrow"] style:UIBarButtonItemStylePlain target:self action:@selector(revealToggle :)]; 
[self.navigationController navigationBar].tintColor = [UIColor whiteColor]; 

[self.navigationController navigationBar].layer.shadowColor=[UIColor colorWithRed:53.0/255.0 green:108.0/255.0 blue:130.0/255.0 alpha:1.0f].CGColor; 
[self.navigationController navigationBar].layer.shadowOffset=CGSizeMake(0, 20); 
[self.navigationController navigationBar].layer.shadowOpacity=0.8; 
[self.navigationController navigationBar].layer.shadowRadius=5.5; 

Ma questo aggiunge solo un'ombra per la freccia e il mio permesso Applica titolo. Ma voglio aggiungere un'ombra esterna come in questa immagine. Dovrebbe essere tra lo NavigationBar e il mio principale UIView Come posso fare questo? Mi aiuti per favore. Grazie

+0

Canu u mostrare la vostra immagine di output –

+0

Chiederò compagno mi dà un'immagine di sfondo con ombra. Immagine di sfondo – AechoLiu

+0

per la barra di navigazione? – user1960169

risposta

3

ho potuto realizzare che in questo modo. Ho rimosso l'aggiunta di un'ombra alla barra di navigazione. Invece di quello ho messo una vista della stessa dimensione sotto la barra di navigazione. Impostare il colore di sfondo di esso sul colore della barra di navigazione. Quindi ha aggiunto l'ombra per quella vista. Questo ha funzionato perfettamente.

-(void)setupNavigationBar 
{ 
    [self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; 
    self.navigationController.navigationBar.shadowImage=[UIImage new]; 

    self.navigationController.navigationBar.translucent=YES; 
    self.navigationController.navigationBar.topItem.titleView.tintColor=[UIColor whiteColor]; 
    self.navigationController.navigationBar.titleTextAttributes=[NSDictionary dictionaryWithObject:[UIFont fontWithName:@"HelveticaNeue" size:15.0f] forKey:NSFontAttributeName]; 
    self.navigationController.navigationBar.topItem.title=strNavigtionTitle; 
    self.navigationController.navigationBar.titleTextAttributes = [NSDictionary dictionaryWithObject:[UIColor whiteColor] forKey:NSForegroundColorAttributeName]; 
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"backarrow"] style:UIBarButtonItemStylePlain target:self action:@selector(revealToggle :)]; 
    [self.navigationController navigationBar].tintColor = [UIColor whiteColor]; 

    UIView *shadow=[[UIView alloc] initWithFrame:CGRectMake(0, 0, dm.screenWidth, 64)]; 
    [shadow setBackgroundColor:[UIColor colorWithRed:62.0/255.0 green:81.0/255.0 blue:119.0/255.0 alpha:1.0]]; 
    shadow.layer.shadowColor=[UIColor colorWithRed:51/255 green:76/255 blue:104/255 alpha:1.0].CGColor; 
    shadow.layer.shadowOffset=CGSizeMake(0, 15); 
    shadow.layer.shadowOpacity=0.12; 
    shadow.layer.shadowRadius=4.5; 
    [self.view addSubview:shadow]; 
} 
12

Qui è necessario importare il framework QuartzCore.

self.navigationController.navigationBar.layer.borderColor = [[UIColor whiteColor] CGColor]; self.navigationController.navigationBar.layer.borderWidth=2;// set border you can see the shadow 
self.navigationController.navigationBar.layer.shadowColor = [[UIColor blackColor] CGColor]; 
self.navigationController.navigationBar.layer.shadowOffset = CGSizeMake(1.0f, 1.0f); 
self.navigationController.navigationBar.layer.shadowRadius = 3.0f; 
self.navigationController.navigationBar.layer.shadowOpacity = 1.0f; 
self.navigationController.navigationBar.layer.masksToBounds=NO; 

Un'altra cosa Devi

set self.layer.masksToBounds = NO; 

Il valore predefinito per questa proprietà è SI, il che significa che, anche se l'ombra è reso, non sarà reso al di fuori dei limiti della vista, il che significa che effettivamente non lo vedi affatto.

Se state animando questo punto di vista in qualche modo, si dovrebbe anche aggiungere questa riga:

self.layer.shouldRasterize = YES; 
+0

Aggiunge l'ombra solo al titolo della barra di navigazione e all'icona a forma di freccia, non alla barra – user1960169

+0

, aggiungendo all'intera barra sotto la barra la sua visualizzazione. Si prega di verificare che abbiate impostato maschereTobound su NO ... –

+0

Yeas I set masksTobound NO – user1960169

7
self.navigationController.navigationBar.layer.shadowColor = [[UIColor blackColor] CGColor]; 
self.navigationController.navigationBar.layer.shadowOffset = CGSizeMake(2.0f, 2.0f); 
self.navigationController.navigationBar.layer.shadowRadius = 4.0f; 
self.navigationController.navigationBar.layer.shadowOpacity = 1.0f; 
+0

Se la barra di navigazione è traslucida, questo codice applica l'ombra al testo e alle icone dei pulsanti. – MLBDG

+0

havent provato questo codice su traslucido – vaibby

Problemi correlati