12

Quiero redondear la esquina superior derecha y la esquina superior izquierda de UINavigationBar.UINavigationBar Rounded Two Corners

Sé que hay funciones para cambiar el radio de la esquina de las vistas, pero ¿es posible hacer algo similar al UINavigationBar estándar?

Si usted no sabe lo que estoy hablando, echa un vistazo a esto:

Gracias!

+0

es posible cambiar de imagen radiuss esquina, pero que afectará a todos los rincones! –

Respuesta

10

La mejor manera es anular drawRect en UINavigationBar y usar una imagen personalizada.

+0

-drawRect: no se llama en iOS 5 - ver http://stackoverflow.com/questions/5575821/custom-nav-bar-styling-ios/6389991#6389991 –

+0

Gracias por actualizar esto. Sin embargo, espero que todos estén informados del protocolo UIAppearance. –

44

el siguiente código funciona para mí (probado en iOS5). El siguiente código redondea las esquinas superiores izquierda/derecha de la barra de navegación principal. Además, se añade una sombra a la misma:

CALayer *capa = [self.navigationController navigationBar].layer; 
[capa setShadowColor: [[UIColor blackColor] CGColor]]; 
[capa setShadowOpacity:0.85f]; 
[capa setShadowOffset: CGSizeMake(0.0f, 1.5f)]; 
[capa setShadowRadius:2.0f]; 
[capa setShouldRasterize:YES]; 


//Round 
CGRect bounds = capa.bounds; 
bounds.size.height += 10.0f; //I'm reserving enough room for the shadow 
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:bounds 
               byRoundingCorners:(UIRectCornerTopLeft | UIRectCornerTopRight) 
                cornerRadii:CGSizeMake(10.0, 10.0)]; 

CAShapeLayer *maskLayer = [CAShapeLayer layer]; 
maskLayer.frame = bounds; 
maskLayer.path = maskPath.CGPath; 

[capa addSublayer:maskLayer]; 
capa.mask = maskLayer; 
+0

@Joze funciona como un encanto, pero mi UIButton deja de funcionar ... ¿Por qué? –

+0

Hola Juan. Tal vez el button.frame.origin.y está siendo enmascarado. Intenta cambiar la coordenada y (tal vez +2 píxeles) y pruébalo. Tal vez ese es el problema – Joze

+1

¡Una respuesta fantástica! Esto realmente hace que la barra de navegación se vea genial. Un problema rápido con el que me encontré para que otros lean: si obtienes un error de enlazador de mach-o, debes vincular la biblioteca de cuarzo en la configuración de tu proyecto. Gracias de nuevo @Joze! – jonstaff