web-dev-qa-db-ja.com

ステータスバーを隠すSwift 4

UIViewControllers(Swift 4)の1つでステータスバーを非表示にしようとしています。

  • まず、View Controllerベースのステータスバーの外観[〜#〜] yes [〜#〜] in _Info.plist_に設定します。

  • コントローラーのprefersStatusBarHiddenプロパティをオーバーライドしました:


_override var prefersStatusBarHidden: Bool {
     return true
}
_

  • viewDidLoad()には、prefersStatusBarHiddenプロパティを強制的に読み取るsetNeedsStatusBarAppearanceUpdate()関数を追加しました。

その後、UIViewControllerにステータスバーが表示されます。

誰か助けてくれませんか?

18

あなたはおそらくこれに対するあなた自身の解決策をすでに見つけましたが、私はこの方法でそれを得ました:

override func viewWillAppear(_ animated: Bool) {
    // Sets the status bar to hidden when the view has finished appearing
    let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
    statusBar.isHidden = true
}

override func viewWillDisappear(_ animated: Bool) {
    // Sets the status bar to visible when the view is about to disappear
    let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
    statusBar.isHidden = false
}
6
MachTurtle

次のコードを追加するだけで、View Controllerの一部またはすべてのステータスバーを非表示にできます。

override var prefersStatusBarHidden: Bool {
     return true
   }

そのコードを含むView Controllerは、デフォルトでステータスバーを非表示にします。

ステータスバーをインまたはアウトでアニメーション化する場合は、View ControllerでsetNeedsStatusBarAppearanceUpdate()を呼び出すだけです(強制的にprefersStatusBarHiddenを再度読み取り、その時点で別の値を返すことができます。必要に応じて、setNeedsStatusBarAppearanceUpdate()への呼び出しを実際にアニメーションブロック内に置くことができます。これにより、ステータスバーがスムーズに表示または非表示になります。

24
Viraj Padsala

一部の実装は次のようにクリーンですが:

UIApplication.shared.isStatusBarHidden = true

遷移中に奇妙なクリッピングアニメーションがいくつかあります。もっと冗長ですが、私は@MachTurtleのソリューションを好みます:

override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(true)
        if let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as? UIView{
        statusBar.isHidden = true
        }
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(true)
    let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
    statusBar.isHidden = false
}

それを試してみてください、私にとってはうまくいきます。

5
Creeptosis

View Controllerをモーダルで表示している場合は、試してください

viewController.modalPresentationCapturesStatusBarAppearance = true
4
Alok Sahay

Info.plistの「コントローラーベースのステータスバーの外観を表示」フラグをYESに設定してみてください。これにより、アプリはprefersStatusBarHidden: BoolすべてのView Controllerのプロパティ。

View controller-based status bar appearance flag

3
Halyna Rubashko

次のコードを使用してくださいUIApplication.shared.isStatusBarHidden = true

iOS11で動作していることがわかったのはこれだけです。 didFinishLaunchingWithOptionsまたは「viewWillAppear」でBaseViewControllerをお楽しみください。

1
nitish005

前に言ったように、UINavigationControllerを使用してカスタムView Controllerに移動しています。カスタムビューコントローラーをUINavigationControllerのルートビューとして設定していると思います。この場合、カスタムView Controllerでvar prefersStatusBarHiddenをオーバーライドしても機能しませんが、UINavigation Controllerをサブクラス化し、以下に示すようにそこでプロパティをオーバーライドする必要があります。

class CustomNavigationController: UINavigationController {

    override var prefersStatusBarHidden: Bool {
        return true
    }

}
1
Shayeeb

これをinfo.plistに追加します

<key>UIStatusBarHidden</key>
    <true/>
0
Ali Alaoi

カスタムコンテナービューを使用していたため、View ControllerでprefersStatusBarHiddenが呼び出されておらず、子ビューコントローラーに責任を隠すステータスバーを転送する必要があることがわかりました。 var childForStatusBarHidden: UIViewController? { return childViewController }私の場合、コンテナビューコントローラで修正されました。

0
Tylerc230

プロジェクトの設定のGeneralセクションの下にあるステータスバーを非表示にチェックしてみてください。

Hide status bar option under Project settings/General

0
Tamás Sengel

ビューの「Top Space to」制約をセーフエリアからスーパービューに変更するだけです。そして、ステータスバーの下にビューをドラッグして、それを隠す必要はありません![enter image description here] 1

0
Vitya Shurapov

コンテナビューコントローラが子ビューコントローラである場合、コンテナビューコントローラにコードを記述する必要があります

     override var prefersStatusBarHidden: Bool {
      return true
     }
0
Jin

これらはどれも、iOS 11で変換されたプロジェクトに取り組んだこともありませんでした。このコードをAppDelegateに追加しました

func application(_ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool
{
    application.isIdleTimerDisabled = true
    application.isStatusBarHidden = true
    return true
}
0
Nicholas Lue