Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

UINavigationBar Rounded Two Corners

I want to round the top right and top left of the UINavigationBar.

I know that there are functions for changing the views corner radius, but is it possible to do something similar to the standard UINavigationBar?

If you don't know what I'm talking about, check out this:

Thanks!

like image 315
Sebastien Peek Avatar asked Nov 20 '10 22:11

Sebastien Peek


2 Answers

the following code works for me (tested on iOS5). The following code rounds the top left/right corners of the main navigation bar. Additionally, it adds a shadow to it:

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;
like image 87
Joze Avatar answered Oct 21 '22 15:10

Joze


The best way is to override drawRect in UINavigationBar and use a custom image.

like image 21
Kolin Krewinkel Avatar answered Oct 21 '22 15:10

Kolin Krewinkel