0

私は、ナビゲーションバーの白いステータスバーの色合いと暗い背景を使用するアプリケーションに取り組んでいます。ナビゲーションバーを非表示にするシーンが1つありますが、ステータスバーの背景色も削除されます。同時にナビゲーションバーを隠すことで暗い背景を維持する簡単な解決法はありますか?ナビゲーションバーを非表示にするステータスバーの背景を失うことなくUINavigationBarを隠す

私のコードは次のとおりです。

[self.navigationController setNavigationBarHidden:YES]; 

またはスウィフト中:

self.navigationController?.navigationBarHidden = true 
+0

最後の文章では、白い背景を正しく保つことを意味しますか? – hasan83

+1

@ hasan83いいえ、ライトスタイルを使用しているので暗くする必要があります。 –

+0

それを得ました。ナビゲーションバーのスタイルを設定するコードを提供できますか? (あなたが色を設定するために使用したコード) – hasan83

答えて

0

あなたはiOS7 +のために開発していると仮定:ステータスバーには、独自の上の任意の背景色を持っている」doesnの。実際には、ナビゲーションバーが表示されているときに暗い背景が表示されているのは、ステータスバーの下に上に向かっているためです。したがって、ステータスバーの背景を保持したい場合は、現在のシーン(viewController、windowなど)に適切な背景色を持つビューを追加するだけです。フレームにUIApplication.sharedApplication.statusBarFrameを付けてください。

- UPDATE 1から

サンプルコード(SWIFT 3)あなたのベタ黒ステータスバーの背景与える:

class ViewController: UIViewController { 
    private let statusBarUnderlay = UIView() 

    override func viewDidLoad() { 
    super.viewDidLoad() 

    statusBarUnderlay.backgroundColor = UIColor.black 
    view.addSubview(statusBarUnderlay) 
    } 

    override func viewWillLayoutSubviews() { 
    super.viewWillLayoutSubviews() 

    statusBarUnderlay.frame = UIApplication.shared.statusBarFrame 
    } 
} 


を - 更新2 -

私たちはそれをしています。上記のコードは、あなたの意見をレイアウトする方法ではありません。代わりに、UIViewのサブクラスを作成し、そこでレイアウトを行います。次にUIViewControllerサブクラスのloadViewをオーバーライドし、カスタムビューのインスタンスを返します。


class View: UIView { 
    private let statusBarUnderlay = UIView() 

    override init(frame: CGRect) { 
    super.init(frame: frame) 

    statusBarUnderlay.backgroundColor = UIColor.black 
    addSubview(statusBarUnderlay) 
    } 

    required init?(coder aDecoder: NSCoder) { 
    fatalError("Storyboards are incompatible with truth and beauty.") 
    } 

    override func layoutSubviews() { 
    super.layoutSubviews() 

    statusBarUnderlay.frame = UIApplication.shared.statusBarFrame 
    } 
} 
+0

このように働いています。それはビューを作成しましたが、ステータスバーのすぐ下に配置しました。 –

+0

ビューフレームを記録できますか?ポートレートで{0、0、screenWidth、20}にする必要があります – Cabus

+0

lldbを "po view.frame"に使用すると、 (起点=(x = 0、y = 0)、サイズ=(幅= 0 、高さ= 0)) –

0

ここで私はそれがであなたを助けるかもしれないと思うLTNavigationBar

の実装です。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    CGFloat offsetY = scrollView.contentOffset.y; 
    if (offsetY > 0) { 
     if (offsetY >= 44) { 
      [self setNavigationBarTransformProgress:1]; 
     } else { 
      [self setNavigationBarTransformProgress:(offsetY/44)]; 
     } 
    } else { 
     [self setNavigationBarTransformProgress:0]; 
     self.navigationController.navigationBar.backIndicatorImage = [UIImage new]; 
    } 
} 

- (void)setNavigationBarTransformProgress:(CGFloat)progress 
{ 
    [self.navigationController.navigationBar.transform = CGAffineTransformMakeTranslation:(0, -44 * progress)]; 
} 

それはあなたがスクロールを必要としないview.Ifをスクロールしたとき、ナビゲーションバー隠され、ステータスバーには、ナビゲーションバーと同じ背景色を持って、あなただけの[self setNavigationBarTransformProgress:1]

0

私は必要なすべてを呼び出すことができます

-(void)viewForStatusBar { 
    UIView *view = [UIView new]; 
    [self.view addSubview:view]; 
    view.backgroundColor = [UIColor blackColor];   
    view.frame = CGRectMake(0, -20, [UIScreen mainScreen].bounds.size.width, 20); 
} 

またはスウィフト中:

func viewForStatusBar() { 
     let view = UIView() 
     self.view.addSubview(view) 
     view.backgroundColor = .blackColor() 
     view.frame = CGRectMake(0, -20, UIScreen.mainScreen().bounds.size.width, 20) 
    } 
二次ビューを追加し、このようなステータスバーの下にそれを設定しましたか
関連する問題