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

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

enter image description here

しかしiPhoneXでは,NavigationBarを表示するとStatusBarも一緒に表示されてしまいます.

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

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

enter image description here

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

よろしくお願いします.

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

FirstViewController.m

- (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;
}

SecondViewController.m

- (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;
}