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