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.

Susitha
la source
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

Rajneesh071
la source
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

Shekhar Gupta
la source
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

Hitesh Vaghela
la source
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.

Gurumoorthy Arumugam
la source
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)
}
Rajesh Loganathan
la source
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;
}
smartbot
la source
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.
Chris
la source
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
    
Shaik Riyaz
la source
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

gbk
la source
8

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

override var prefersStatusBarHidden: Bool {
    return true
}
andrewz
la source
7

Essayez ça;

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
Kemal Can Kaynak
la source
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.

Manju
la source
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.

Esqarrouth
la source
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;

Ketan P
la source
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

MANISH PATHAK
la source
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".

trou noir
la source
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

Ashu
la source
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

Jerry Chong
la source
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

Tony
la source
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]
smileBot
la source
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

Prazgaitis
la source