web-dev-qa-db-ja.com

iOS8では、アプリを横向きモードで表示するとステータスバーが非表示になりますが、iOS 7ではステータスバーが両方の方向に表示されます

ステータスバーをiOS 8の両方の方向に表示する必要があります。 iOS 7では適切に表示されています。

navigationController.isNavigationBarHiddenはNOを返します。

IOS 8がこれを行うのはなぜですか?

41
Tim Nuwin

これを試してください

didRotateFromInterfaceOrientationに以下のコードを追加します

[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];

[〜#〜] edit [〜#〜]
すべてのビューコントローラーにコードを書き込む必要はありません
Set View controller-based status bar appearanceNOplistに追加し、ルートビューコントローラーのviewDidLoadに以下のコードを追加します

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];

デモプロジェクト
https://www.dropbox.com/s/uumneidk4wom5md/demoStatusBar.zip?dl=

59
Jageen

IOS 8で横向きモードでステータスバーを表示するには、次の方法を試してください

- (BOOL)prefersStatusBarHidden {
    return NO;
}

スイフト版

override func prefersStatusBarHidden() -> Bool {
    return false
}

Swift 3、Xcode 8、iOS 10、/ * ViewController.Swift * /

override var prefersStatusBarHidden: Bool {
        return false
    }
49
Vidhi

Jageenのソリューションはおそらく最も良いものです。たった1つの小さな変更、つまりviewDidLoadを使用する代わりに、application:didFinishLaunchingWithOptions:を使用することをお勧めします。

基本的には2段階のプロセスです。

1)。プロジェクトのInfo.plistファイルで、「コントローラーベースのステータスバーの外観を表示」をNOに設定します。

2)。次のコードを使用して、application:didFinishLaunchingWithOptions:でステータスバーの非表示ステータスを強制的にNOにします。

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];

そして、出来上がり!

注:上記のsetStatusBarHidden:withAnimationステートメントの両方を使用して、ステータスバーを強制的に非表示状態にすることが重要です。

9
Mustafa

これは問題ではなく、iOS 8の機能です。iOS8では、横向きモードではステータスバーが非表示になります。Appleのアプリケーションも同じ動作をします。

5
Ganesh Guturi

私は同じ問題を抱えていました!これをviewDidLoadに依存させることで修正

  [self setNeedsStatusBarAppearanceUpdate];

そしてこれは実装自体に

-(BOOL)prefersStatusBarHidden{
    return NO;
}
5
serg_ov

彼らは、私たちにもっと多くの仕事を与えることで、私たちを有能に雇っています。

または...

彼らは、ビットが以前よりも多くのスペースを占有する原因となる他の変更を加えました。 iOS 7と「トップレイアウトバーガイド」などの出現により、スワイプダウン画面でステータスバーを簡単に利用できるようになり、ステータスバーのスペースが使用可能になり、多くの人がステータスバーを予測するその他の小さなヒントUIの標準部分として段階的に廃止されます。

IOS 8でさまざまなサイズのコードを簡単にコーディングできるように変更したため、新しいデバイスサイズについてもかなりの話題があります。

それは純粋な憶測ですが、iOS 8ではランドスケープステータスバーが表示されるとは思いません。

4
DBD

Swift

override func viewDidLoad() {
        super.viewDidLoad()
        UIApplication.shared.setStatusBarHidden(true, with: .none)
        UIApplication.shared.setStatusBarHidden(false, with: .none)
///
    }

内部にInfo.plist この:

UIViewControllerBasedStatusBarAppearanceブール値NO

3
Vyacheslav

Swift(2017年6月2日現在)

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear()
    self.setNeedsStatusBarAppearanceUpdate()
}

override var prefersStatusBarHidden : Bool {
    return false
}
1
BennyTheNerd

上記の手順に従い、左右のランドスケープが両方とも有効になっていることを確認することで修正しました。

プロジェクト/ターゲット/展開情報の下

enter image description here

0
StackRunner