web-dev-qa-db-fra.com

Comment masquer la barre d'état dans une application Swift iOS?

J'aimerais supprimer la barre d'état en haut de l'écran.

Cela ne fonctionne pas:

func application
(application: UIApplication,
didFinishLaunchingWithOptions launchOptions: NSDictionary?)
-> Bool
{
        application.statusBarHidden = true
        return true
}

J'ai aussi essayé:

func application
(application: UIApplication,
didFinishLaunchingWithOptions launchOptions: NSDictionary?)
-> Bool
{
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)

    var controller = UIViewController()
    application.statusBarHidden = true
    controller.setNeedsStatusBarAppearanceUpdate()

    var view = UIView(frame: CGRectMake(0, 0, 320, 568))
    view.backgroundColor = UIColor.redColor()
    controller.view = view

    var label = UILabel(frame: CGRectMake(0, 0, 200, 21))
    label.center = CGPointMake(160, 284)
    label.textAlignment = NSTextAlignment.Center
    label.text = "Hello World"
    controller.view.addSubview(label)

    self.window!.rootViewController = controller
    self.window!.makeKeyAndVisible()
    return true
}
169
Jay

Vous devez vraiment implémenter prefersStatusBarHidden sur votre (vos) contrôleur (s) de vue:

Swift 2

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

Swift 3 et plus tard

override var prefersStatusBarHidden: Bool {
    return true
}
397
drewag
  1. Aller au fichier Info.plist
  2. Placez le curseur sur l'une de ces lignes et un bouton (+) et (-) apparaîtra.
  3. Cliquez sur le bouton plus pour ajouter une nouvelle clé. Entrez début V majuscule; automatiquement, le premier choix sera Afficher la barre d'état basée sur le contrôleur.
  4. Ajoutez cela comme la clé.
  5. Définissez la valeur sur "NO"
  6. Allez à vous AppDelegate.Swift
  7. Ajouter le code, à l'intérieur de la méthode

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject:AnyObject]?) -> Bool {
        application.statusBarHidden = true
        return true
    }
    

TERMINÉ! Exécutez votre application et plus de barre d'état!

95
nycdanie

Swift 3

Dans Info.plist, définissez View controller-based status bar appearance sur NO

Et appelez UIApplication.shared.isStatusBarHidden = true

68
Joseph Mark

Si vous souhaitez masquer et ramener la barre d'état sur le bouton, tapez sur , au moment de présenter et de fermer le menu déroulant , popups etc, vous pouvez utiliser cette méthode: -

Pour masquer la barre d'état: -

UIApplication.shared.keyWindow?.windowLevel = UIWindowLevelStatusBar

Pour ramener la barre d'état: -

UIApplication.shared.keyWindow?.windowLevel = UIWindowLevelNormal 
35
Vincent Joy

si vous préférez une approche visuelle plutôt que la coder, utilisez cette méthode: dans votre info.plist

 enter image description here ajoutez simplement View controller-based status bar appearance à NO

et Status bar is initially hidden comme YES

31
Milad Masoodi

Mise à jour pour iOS 10/Swift 3.0

Plus une fonction, maintenant une propriété ... 

override var prefersStatusBarHidden: Bool {
    return true
}
27
atlwx
 override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(true);
    navigationController?.navigationBar.hidden = true // for navigation bar hide
    UIApplication.sharedApplication().statusBarHidden=true; // for status bar hide
}
25
Mohit tomar

dans Swift 3.x:

override func viewWillAppear(_ animated: Bool) {
    UIApplication.shared.isStatusBarHidden = true
}
14
Samira Ekrami

Allez dans votre Info.plist et ajoutez deux clés:

 Go to your Info.plist and add two Keys:

12
janaz

Le problème ici n’a donc en réalité rien à voir avec Swift, mais à la façon dont l’aspect de la barre d’état est géré à partir d’iOS 7.

Par défaut, les contrôleurs de vue contrôlent individuellement l'apparence de la barre d'état lorsqu'ils sont à l'écran. Si vous souhaitez utiliser cette méthode de contrôle de la barre d'état, vous pouvez remplacer les méthodes suivantes pour tous les contrôleurs de vue pour lesquels vous souhaitez modifier l'apparence:

prefersStatusBarHidden, preferredStatusBarStyle, preferredStatusBarAnimation,

Dans votre cas, vous implémenteriez simplement prefersStatusBarHidden et renverriez true.

L'autre façon serait de contrôler l'apparence de la barre d'état au niveau de l'application. Cela semble être ce que vous essayez réellement de faire (en définissant application.statusBarHidden).

Pour que cela fonctionne, vous devez ouvrir le fichier Info.plist de votre application, ajouter la clé UIViewControllerBasedStatusBarAppearance et lui attribuer la valeur NO.

12
Dima

J'ai effectivement compris cela moi-même. Je vais ajouter ma solution comme une autre option.

extension UIViewController {
    func prefersStatusBarHidden() -> Bool {
        return true
    }
}
8
Jay

D'accord, cela devient donc un problème pour moi puisque iOS 9 ne prend en charge aucune des méthodes mentionnées ci-dessus, telles que UIApplication.sharedApplication().statusBarHidden = trueou 

UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: UIStatusBarAnimation.None)

et

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

fonctionne mais ne fournit pas de solution programmable où je puisse changer à une condition . (statusBarHidden = true et statusBarHidden = false comme nous l’avons fait auparavant). 

Solution à cette folie:

En ajoutant à prefersStatusBarHidden() comme ci-dessous, vous pouvez contrôler par programme les masques d'affichage et d'affichage de la barre d'état sans ajouter le paramètre UIViewControllerBasedStatusBarAppearance à votre info.plist:

var showStatusBar = true

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

private func showStatusBar(enabled: Bool) {
    showStatusBar = enabled
    prefersStatusBarHidden()
}

puis utilisez-le comme ceci dans votre code:

//Hide Status Bar
showStatusBar(false)

OR

//Show Status Bar
showStatusBar(true)
4
CodeOverRide

Il suffit d'ajouter que, lors de la substitution d'une méthode ou d'une variable prefersStatusBarHidden, le View controller-based status bar appearance dans Info.plist doit être OUI, sinon le remplacement n'aura aucun effet.

3
Huanyan

Dans mon cas, je cherchais la barre d'état à afficher/masquer à la demande; au lieu de juste quand la vue se charge ou disparaît. 

Swift 3.x

//show status bar initially
var showStatusBar = true

//set the parameters
override var prefersStatusBarHidden: Bool {

    if showStatusBar == true {

        //does not prefer status bar hidden
        print("does not prefer status bar hidden")
        return false

    } else {

        //does prefer status bar hidden
        print("does prefer status bar hidden")
    return true

    }
}

//ex: hide status bar and call parameter function again whenever you want
        showStatusBar = false
        setNeedsStatusBarAppearanceUpdate()
2
Felecia Genet

Dans votre projet Général-> Infos de déploiement-> Style de la barre d'état. Cochez la case Masquer la barre d'état Remarque: - il masque la barre d'état dans l'application.

2
Sweta Vani

dans Swift 4.2 c'est une propriété maintenant. 

override var prefersStatusBarHidden: Bool {
    return true
}
1
Rawand Saeed

Swift 4

//MARK:- Show Status Bar
UIApplication.shared.isStatusBarHidden = false

//MARK:- Hide Status Bar
UIApplication.shared.isStatusBarHidden = true
1
Shakeel Ahmed

Pour Swift 4+, essayez le code suivant (testé sur Swift 4.0, 4.1 - IOS 10, 11): 

override var prefersStatusBarHidden: Bool { return true }

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    // call this func to force preferredStatusBarStyle to be read again.
    setNeedsStatusBarAppearanceUpdate()
}
1
Coder ACJHP

Swift 5: dans le contrôleur de la vue principale, ou le contrôleur de navigation principal si vous avez,

    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }

    override var prefersStatusBarHidden: Bool {
        return false
    }

Et "Afficher l'apparence de la barre d'état basée sur le contrôleur" dans la pliste doit être défini sur OUI, sinon le code ci-dessus ne sera pas appelé.

Si vous souhaitez masquer la barre d'état lors du lancement de l'application, le nom "La barre d'état est initialement masquée" doit être OUI. Cela peut éviter que l'image de lancement ne soit déformée lorsque des barres bleues supplémentaires apparaissent en haut de l'écran.

1
Sam Xu

Une solution qui fonctionne pour moi. si vous souhaitez masquer la barre d'état sur un contrôleur de vue spécifique pendant le chargement:

import UIKit

class ViewController: UIViewController {

private var hideStatusBar: Bool = false

override var prefersStatusBarHidden: Bool {
    return hideStatusBar
}

override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
    return UIStatusBarAnimation.slide
}

override func viewDidLoad() {
    super.viewDidLoad()

    view.backgroundcolor = .white
    hideStatusBar = true

    UIView.animate(withDuration: 0.3) {
        self.setNeedsStatusBarAppearanceUpdate()
    }
}

Attention: si vous définissez la clé " Afficher l'apparence de la barre d'état basée sur le contrôleur " sur "NO" dans votre info.plist, le code ci-dessus ne fonctionne pas. Vous devez définir la clé sur "YES" ou remove it from info.plist 

1
andre_hold

Dans votre projet-> Général-> Informations de déploiement 

Statusbar Style: -

juste marqué Masquer la barre d'état (iOS 10)

0
V D Purohit

Vous pouvez utiliser ce code dans votre ViewControllerClassscope 

open override var prefersStatusBarHidden: Bool { return true }
0
Sajjad

Si vous présentez le contrôleur de vue de manière modale, essayez

viewController.hidesBottomBarWhenPushed = true
viewController.modalPresentationCapturesStatusBarAppearance = true
0
YannSteph

J'utilise Xcode 8.1 (8B62) avec une cible de déploiement définie à 10.1 et je n'ai pas eu beaucoup de chance avec les options de remplacement mentionnées ci-dessus. Cependant, cocher la case "Masquer la barre d'état" dans les infos de déploiement a été une solution.

Projet> Général

J'espère que ça aide.

0
danmerfeld
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        application.isStatusBarHidden = true
        return true
    }
0
Prasad Bulbule