12

UINavigationBarの右上と左上を丸くしたい。UINavigationBar丸みを帯びた2つのコーナー

私はビューコーナーの半径を変更する機能があることを知っていますが、標準のUINavigationBarに似た何かをすることは可能ですか?あなたは私が話しているのか分からない場合は

、これをチェックアウト:

感謝を!

+0

ビューコーナーのラジウスを変更することはできますが、すべてのコーナーに影響します。 –

答えて

10

UINavigationBarでdrawRectをオーバーライドし、カスタムイメージを使用することをお勧めします。

+0

-drawRect:iOS 5で呼び出されない - http://stackoverflow.com/questions/5575821/custom-nav-bar-styling-ios/6389991#6389991 –

+0

これを更新していただきありがとうございます。私は今日誰もがUIAppearanceプロトコルを知らされることを願っています。 –

44

コア*家族について非常に精通していませんよ。 次のコードは、メインナビゲーションバーの左上/右隅を丸めます。さらに、影を追加します。

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のバックが機能しなくなります...なぜですか? –

+0

こんにちはJuan。 button.frame.origin.yがマスクされている可能性があります。 y座標(おそらく+2ピクセル)を変更して試してみてください。多分それは問題です – Joze

+1

素晴らしい答え!これにより、ナビゲーションバーが大きく見えるようになります。私が他の人のために遭遇した簡単な問題:Mach-Oリンカーエラーが発生した場合、プロジェクト設定でquartzcoreライブラリをリンクする必要があります。再びありがとう@ジョーズ! – jonstaff