

一つのiOSアプリケーションで`NavigationBar`と`StatusBar`の表示／非表示を画面によって制御したいと思っています．

**iPhone6** , **iPhone7** and **iPhone8** では，意図通りに表示できています．  
最初の画面ではステータスバーもナビゲーションバーも表示されず，  
次の画面ではステータスバーは非表示のままで，ナビゲーションバーは表示されます．

[![enter image description
here](https://i.stack.imgur.com/wvZP0.png)](https://i.stack.imgur.com/wvZP0.png)

しかし **iPhoneX** では，`NavigationBar`を表示すると`StatusBar`も一緒に表示されてしまいます．

`ViewController`での`prefersStatusBarHidden`はYESに設定しています.

また`NavigationBar`の高さも`StatusBar`の分が加わったような高さになってしまいます．

[![enter image description
here](https://i.stack.imgur.com/iOm88.png)](https://i.stack.imgur.com/iOm88.png)

解決方法をご存知でしたら教えていただきたいと思います．

よろしくお願いします．

コードは以下のような感じです．

**FirstViewController.m**

[code]

    - (void)viewDidLoad
    {
        [super viewDidLoad];
    
        self.view.backgroundColor = UIColor.yellowColor;
    
        self.navigationController.navigationBarHidden = YES;
    }                                 }
    
    - (void)viewWillAppear:(BOOL)animated
    {
        [super viewWillAppear:animated];
    
        self.navigationController.navigationBarHidden = YES;
    }
    
    - (void)touchUpButton:(UIButton *)button
                                      {
        SecondViewController *vc = [[SecondViewController alloc] init];
        [self.navigationController pushViewController:vc animated:YES];
    }
    
    - (BOOL)prefersStatusBarHidden
    {
        return YES;
    }
    
[/code]

**SecondViewController.m**

[code]

    - (void)viewDidLoad
    {
        [super viewDidLoad];
    
        self.navigationController.navigationBarHidden = NO;
        self.navigationItem.title = @"SecondView";
    
        self.view.backgroundColor = UIColor.cyanColor;
    }
    
    - (void)viewWillAppear:(BOOL)animated
    {
        self.navigationController.navigationBarHidden = NO;
    }
    
    - (BOOL)prefersStatusBarHidden
    {
        return YES;
    }
    
[/code]


CC BY-SA 3.0
2018-01-11T12:51:41.297
40889
2018-01-15T01:50:20.733
9103
question
ios navigationbar iphone-x
iPhoneXでナビゲーションバーとステータスバーの表示／非表示を別々に制御する方法


本家（英語版）のほうのStackOverFlowでも質問をしていたのですが， **iPhoneXの挙動**
ということで，ナビゲーションバーを表示して，ステータスバーを表示しない．ということは出来ないそうです．

  * On iPhoneX, Control Show / Hide NavigationBar and StatusBar separately  
<https://stackoverflow.com/questions/48207378/on-iphonex-control-show-hide-
navigationbar-and-statusbar-separately>

また認識はしていましたが，AppleのUIガイドラインでもiPhoneXではステータスバーを表示するのが推奨とのことです．


CC BY-SA 3.0
2018-01-15T01:50:20.733
40969
2018-01-15T01:50:20.733
9103
40889
answer