Comment masquer la barre d'état iOS


219

Dans ma barre d'état de l'application vidéo iOS est masquée dans certains contrôleurs de vue. J'ai fait cela en utilisant le code suivant.

[[UIApplication sharedApplication] setStatusBarHidden:YES];
  • Cela fonctionne pour iOS 5 et iOS 6, mais pas dans iOS 7.

  • J'ai essayé avec ce contrôleur de vue en particulier,

Par exemple:

-(BOOL)prefersStatusBarHidden { return YES; }

Cela fonctionne bien, mais je ne peux plus afficher la barre d'état dans le contrôleur de vue parent.



1
Si le style de la barre d'état est défini dans le Storyboard, après avoir modifié la "Barre d'état basée sur le contrôleur de vue" (ci-dessous), le style devra peut-être être défini dans la liste car le paramètre du contrôleur de vue ne sera plus utilisé. stackoverflow.com/questions/18924345/…
Matt

1
J'ai répondu dans une autre question. Essaye ça. [le moyen le plus simple de masquer la barre d'état par programme] [1] [1]: stackoverflow.com/a/27339754/3718498
wataru

1
J'ai utilisé un truc pour cela - je l'ai publié sous pod cocoapods.org/pods/UIViewController+ODStatusBar , j'espère que cela sera utile pour n'importe qui
Alex Nazarsky

Les réponses ici sont désormais obsolètes. J'ai eu du mal à trouver la bonne réponse pour iOS 9 lors du masquage de la barre d'état POUR JUSTE L'ÉCRAN DE LANCEMENT , donc lier ci-dessous afin qu'il soit plus facile pour les autres de trouver comment le faire: stackoverflow.com/questions/34413848/…
Ben

Réponses:


277

Vous devez ajouter cette valeur à plist: " Afficher l'apparence de la barre d'état basée sur le contrôleur " et la définir sur " NON ".

entrez la description de l'image ici


40
Pour référence, la clé brute estUIViewControllerBasedStatusBarAppearance
William Denniss

1
@ Rajneesh071 Que dois-je faire si je veux définir PreferredStatusBarStyle pour le travail dont j'ai besoin "View controller-based status bar appearance" set it to "YES".?
Bimawa


à quel problème êtes-vous confronté?
Rajneesh071

semble obsolète, va casser votre application
Ben

194

Ajoutez ce qui suit à votre Info.plist:

<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>

Image


Fonctionne très bien dans Xcode 11.3, iOS 13
Wayne Henderson

113

Ajouter la ligne suivante dans viewdidload

  [[UIApplication sharedApplication] setStatusBarHidden:YES
                                        withAnimation:UIStatusBarAnimationFade];

et ajouter une nouvelle méthode

  - (BOOL)prefersStatusBarHidden {
          return YES;
  }

modifier également le fichier info.plist Afficher l'apparence de la barre d'état basée sur le contrôleur "= NON

ses travaux pour moi


Merci celui-ci fonctionne pour moi, mais je dois également ajouter la ligne ci-dessous dans la liste. "Afficher l'apparence de la barre d'état basée sur le contrôleur" = NON i, e Ajouter la ligne suivante dans viewdidload [[UIApplication sharedApplication] setStatusBarHidden: YES withAnimation: UIStatusBarAnimationFade]; et ajouter une nouvelle méthode - (BOOL) prefersStatusBarHidden {return YES; } Ajouter "Afficher l'apparence de la barre d'état basée sur le contrôleur" = NON dans le fichier Plist
sableux

prefersStatusBarHiddenest ce qui a fait l'affaire pour moi (que ce soit avec cette solution ou avec d'autres similaires)
Abdo

34

Dans le Plist, ajoutez les propriétés suivantes.

Status bar is initially hidden = YES

View controller-based status bar appearance = NO

maintenant la barre d'état sera cachée.


8
Les clés brutes seraient UIStatusBarHidden et UIViewControllerBasedStatusBarAppearance
leolobato

27

Essayez cette méthode simple:


Objectif c:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated]
    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated]
    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
}

Rapide:

override func viewWillAppear(animated: Bool) 
{
    super.viewWillAppear(animated)
    UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: UIStatusBarAnimation.None)
}

override func viewWillDisappear(animated: Bool) 
{
    super.viewWillDisappear(animated)
    UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.None)
}

1
Ce fut une merveilleuse réponse! Essayez-le également avec les différents UIStatusBarAnimations, ils sont plutôt bien.
VedTopkar

N'oubliez pas [super viewWillAppear:animated]et[super viewWillDisappear:animated]
SamB

1
Cette solution simple a fonctionné pour moi iOS 10. Manière d'être un homme simple!
coolcool1994

14

J'ai fait ce qui suit et cela semble fonctionner (même dans iOS 8):

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) {

        [[UIApplication sharedApplication] setStatusBarHidden:YES];
    }
}

- (BOOL)prefersStatusBarHidden {
    return YES;
}

12
  • UIApplication.setStatusBarX est obsolète à partir d'iOS9
  • Il est déconseillé d'avoir UIViewControllerBasedStatusBarAppearance = NO dans votre info.plist
  • Nous devrions donc utiliser PreferredStatusBarX dans tous nos contrôleurs de vue

Mais cela devient plus intéressant lorsqu'un UINavigationController est impliqué:

  • Si navigationBarHidden = true, l'enfant UIViewController PreferredStatusBarX est appelé, car l'enfant affiche le contenu sous la barre d'état.
  • Si navigationBarHidden = false, les UINavigationController PreferredStatusBarX sont appelés, après tout, ils affichent le contenu sous la barre d'état.
  • UINavigationController par défaut PreferredStatusBarStyle utilise la valeur de UINav.navigationBar.barStyle. .Default = contenu de la barre d'état noire, .Black = contenu de la barre d'état blanche.
  • Donc, si vous définissez barTintColor sur une couleur personnalisée (ce que vous êtes probablement), vous devez également définir barStyle sur .Black pour obtenir le contenu de la barre d'état blanche. Je mettrais barStyle sur noir avant de définir barTintColor, au cas où barStyle remplacerait barTintColor.
  • Une alternative est que vous pouvez sous-classer UINavigationController plutôt que de contourner avec un style de barre.
  • TOUTEFOIS, si vous sous-classe UINavigationController, vous n'avez aucun contrôle sur la barre d'état si navigationBarHidden = true. D'une manière ou d'une autre, UIKit va directement à l'enfant UIViewController sans demander à l'UINavigationController dans cette situation. J'aurais pensé que ce devrait être la responsabilité de UINavigationController de demander à l'enfant> hausse les épaules <.
  • Et UIViewController affiché de manière modale n'a son mot à dire dans la barre d'état que si modalPresentationStyle = .FullScreen.
  • Si vous avez un contrôleur de vue modale de style de présentation personnalisé et que vous voulez vraiment qu'il contrôle la barre d'état, vous pouvez définir modalPresentationCapturesStatusBarAppearance = true.

Pourquoi Apple ne peut-il pas suivre un seul conseil? S'il n'est pas cassé, ne le réparez pas!
Jargen89

9

Pour masquer la barre d'état dans iOS7, vous avez besoin de 2 lignes de code

  1. dans l'application: (UIApplication *) application didFinishLaunchingWithOptions: (NSDictionary *) launchOptions écrit

     [[UIApplication sharedApplication] setStatusBarHidden:YES];
    
  2. dans info.plist ajoutez ceci

     View-Controller Based Status Bar Appearance = NO
    

8

Pour une meilleure compréhension, ajoutez quelques photos avec commentaires:

App avant toute modification

entrez la description de l'image ici

Trouvé dans votre Project Navigatordossier nommé Supporting Fileset cliquez sur le fichier * .plist

entrez la description de l'image ici

Après, vous obtiendrez un réglage différent de votre application. Vous devez ajouter 2 clés UIStatusBarHiddenet UIViewControllerBasedStatusBarAppearance. Vous pouvez le faire en cliquant simplement sur le bouton +

entrez la description de l'image ici

Après avoir appuyé sur +, vous pouvez choisir l'une des touches - commencez simplement à taper.

Version correcte:

entrez la description de l'image ici

Et enfin application après avoir appliqué ces changements:

entrez la description de l'image ici

Vous pouvez également trouver une solution alternative ici


8

Dans iOS10 tout ce que je besoin de faire est remplacer le prefersStatusBarHiddenvar dans mon RootViewController(Swift):

override var prefersStatusBarHidden: Bool {
    return true
}

7

Essayez ça;

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

Génial. J'ai pu l'utiliser pour masquer la barre d'état sur le contrôleur de vue sur laquelle il n'était pas nécessaire, puis l'afficher une fois que l'utilisateur s'est connecté.
LondonGuy

5

Pour masquer votre barre d'état dans iOS7:

Ouvrez votre fichier plist, puis ajoutez une ligne supplémentaire intitulée "Afficher l'apparence de la barre d'état basée sur le contrôleur" et définissez sa valeur sur NO.


5

Voici la version Swift (pré iOS9):

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: UIStatusBarAnimation.None)
}

override func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(animated)
    UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.None)
}

Cela fonctionne également (iOS7 +):

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

Vous devez également appeler:

setNeedsStatusBarAppearanceUpdate()

disons viewDidLoad().

Notez que si vous utilisez un contrôleur SplitView ou un autre containercontrôleur de vue, vous devez également le faire retourner votre classe lors de son envoi childViewControllerForStatusBarHidden. Une façon de le faire est d'avoir un var faible public pour dire statusController, et le retourner dans cette méthode redéfinie.


1
Le bloc supérieur est déconseillé dans iOS8 - utilisez votre deuxième approche. Et merci! J'ai modifié le code pour ajouter un autre appel obligatoire.
David H

5

iOS 9 et suivants:

Comme statusBarHiddenméthode a été Obsolète de iOS9 vous devez ajouter deux valeurs dans plist comme ci - dessous:

<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>

ou par interface utilisateur Veuillez vous référer à l'image ci-dessous:

entrez la description de l'image ici

Comme statusBarHiddenest Obsolète de iOS9 :

@property (readwrite, nonatomic, getter = isStatusBarHidden) BOOL statusBarHidden NS_ PÉRIMÉ _IOS (2_0, 9_0 , "Use - [UIViewController prefersStatusBarHidden]") __TVOS_PROHIBITED;


5

SOLUTION FIXE POUR SWIFT 3+ (iOS 9, 10)

1- Dans la liste info.plist définie sous la propriété

entrez la description de l'image ici

2- Collez le code ci-dessous dans le contrôleur racine,

 private var isStatusBarHidden = true {
        didSet {
            setNeedsStatusBarAppearanceUpdate()
        }
    }

    override var prefersStatusBarHidden: Bool {
        return isStatusBarHidden
    }

Vous pouvez appeler isStatusBarHidden = trueet isStatusBarHidden = falseoù vous voulez la hide/showbarre d'état


4

Vous devez ajouter cette valeur à plist: "Afficher l'apparence de la barre d'état basée sur le contrôleur" et la définir sur "NON".


4

Étapes pour masquer la barre d'état dans iOS
1. ouvrez le fichier AppDelegate.m , ajoutez application.statusBarHidden dans la méthode didFinishLaunchingWithOptions

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    application.statusBarHidden = YES;
    return YES;
    }
  1. ouvrir info.plist et définir

View controller-based status bar appearance ensemble NO


4

Swift 5

Suivez les étapes suivantes pour masquer la barre d'état iOS:

  1. Ouvrez sur Info.plist.
  2. Ajoutez une nouvelle clé. Affichez l'apparence de la barre d'état basée sur le contrôleur et la valeur définie sur NON .
  3. Ajouter une nouvelle clé La barre d'état est initialement masquée et la valeur définie sur OUI .
  4. Recompiler le projet.
  5. La barre d'état devrait maintenant être masquée sur le téléphone iOS.

Capture d'écran des paramètres finaux:

Paramètres finaux

Cela fonctionne sur Xcode 10.2


2

De UIKit> UIApplication.h:

// Setting statusBarHidden does nothing if your application is using the default UIViewController-based status bar system.
@property(nonatomic,getter=isStatusBarHidden) BOOL statusBarHidden;
- (void)setStatusBarHidden:(BOOL)hidden withAnimation:(UIStatusBarAnimation)animation NS_AVAILABLE_IOS(3_2);

Devrait donc être réglé View controller-based status bar appearancesur NO


2

Pour répondre à la question de Susitha: utilisez setNeedsStatusBarAppearanceUpdate . Cela fera un appel à prefersStatusBarHidden pour se rafraîchir avec l'état de la barre d'état souhaité. Essaye ça:

    @property (nonatomic, getter=isHideStatusBar) BOOL hideStatusBar; // Give this a default value early

    - (BOOL)prefersStatusBarHidden {
        return self.isHideStatusBar;
    }

    - (void)someMethod {
    // triggered by an event or user action
    [self setHideStatusBar:YES];
    [self setNeedsStatusBarAppearanceUpdate];
    }

Si vous souhaitez voir à nouveau la barre d'état, définissez votre propriété hideStatusBar (ou tout autre nom) sur NO. Appelez preferStatusBarHidden indirectement en effectuant un autre appel à

[self setNeedsStatusBarAppearanceUpdate]

1

Mise à jour pour Swift 3:

Mettez à jour Info.plist avec les informations suivantes:

View controller-based status bar appearance: NO

Ensuite, dans un ViewController ou ailleurs:

UIApplication.shared.isStatusBarHidden = true

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.