12

我想围绕UINavigationBar的右上角和左上角。UINavigationBar圆角的两个角落

我知道有更改视图角半径的函数,但它可以做类似于标准UINavigationBar的东西吗?

如果你不知道我在说什么,看看这个:

谢谢!

+0

它可以改变视角角落,但它会影响所有的角落! – 2012-04-13 19:34:47

回答

10

最好的方法是在UINavigationBar中重写drawRect并使用自定义图像。

+0

-drawRect:不会在iOS 5中调用 - 请参阅http://stackoverflow.com/questions/5575821/custom-nav-bar-styling-ios/6389991#6389991 – 2012-04-20 20:33:08

+0

感谢您对此进行更新。尽管如此,我希望现在每个人都了解UIAppearance协议。 – 2012-07-09 03:41:18

44

下面的代码对我的作品(在iOS5的测试)。 以下代码将主导航栏的左上角/右下角四舍五入。此外,它增加了一个影子:

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它像一个魅力,但我的UIButton后退停止工作...为什么? – 2013-03-07 15:40:32

+0

嗨娟。也许button.frame.origin.y被屏蔽。尝试改变y坐标(也许+2像素)并尝试。也许这就是问题 – Joze 2013-03-13 10:33:51

+1

梦幻般的答案!这确实使导航栏看起来很棒。我遇到的一个快速问题是,如果你遇到了一个mach-o链接器错误,你必须链接项目设置中的quartzcore库。再次感谢@Joze! – jonstaff 2013-03-20 22:38:06