2016-08-08 5 views
1

私はスレッドhereと同じ問題があります。テキストを白くすることでステータスバーを表示させることができますが、これは私の目標ではありません。私はまた、すべてのナビゲーションバーのように、バーの上に色を付けることを意味します。私はviewSubviewsの下で、ビューで必要なシェイプを追加することでこれを達成することができましたが、この方法でUINavigationItemを操作したり表示したりすることはできません。コード:UINavigationBarサブクラスのdrawRectはステータスバーを黒にします

- (void)drawRect:(CGRect)rect { 
[super drawRect:rect]; 
CGContextRef context = UIGraphicsGetCurrentContext(); 
[[UIColor yellowColor] setFill]; 
UIRectFill(rect); 

これが結果です:

enter image description here

これはのdrawRectで達成することができる靱皮です:

enter image description here

そして、あなたはそれを行う場合に発生しますlayoutSubviewsの下:

enter image description here

ご覧のとおり、バックテキスト、矢印はすべて失われています。だから私は本当にdrawRectを動作させる方法を探しています!あなたの助けを前もってありがとう!

+0

あなたはそれがあなたの3番目の写真のように見えるようにしたが、ボタンは表示されませんでしたか? – Tj3n

+0

@ Tj3nはい、それは私が欲しい色だけではありません。そうでなければ、色合いの色のプロパティを使用します。このバーは、適切なスケッチ(スターと複数の色が入っている)を意図しています。これは、viewがすべての表示要素(ボタン、メイン画面のタイトル、すべて)をブロックしているため、layoutSubviewはdrawRectの上で動作するためです。 – isklikas

+0

実際には 'navigationBar'の背景、影、色を隠して色をクリアし、その目に見えないナビゲータバーの下にカスタムビューを追加することができます。かなり簡単です – Tj3n

答えて

1

まず、と目に見えないし、あなたのナビゲーションバーを設定します。あなたのサブビューその後

navController.view.insertSubview(navBarView, belowSubview: (navigationController?.navigationBar)!) 

:その後でそれを追加し、ストーリーボード内のビューまたはXIBを作成し、VCで財産を作る

navController.navigationBar.translucent = true 
navController.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default) 
navController.navigationBar.shadowImage = UIImage() 
navController.navigationBar.backgroundColor = UIColor.clearColor() 

バーのボタンの後ろに表示され、あなたのカスタムnavBarViewで正常に動作することができますが、そのときはnavBarViewを削除し、ビューが消えるときにnavBarをデフォルトに戻してください:

navController.navigationBar.translucent  = false 
navController.navigationBar.shadowImage  = nil 
navController.navigationBar.setBackgroundImage(nil, forBarMetrics: .Default) 
navController.navigationBar.backgroundColor = UIColor.whiteColor() 
+0

ありがとう、これは私を多くの欲求不満から救った! :) – isklikas

関連する問題