web-dev-qa-db-fra.com

Comment masquer la barre d'état iOS

Dans la barre d'état de mes applications vidéo iOS, certains contrôleurs de vue masquent. J'ai fait cela en utilisant le code suivant.

[[UIApplication sharedApplication] setStatusBarHidden:YES];
  • Cela fonctionne pour iOS 5 et iOS 6, mais pas sous 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.

214
Susitha

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 "NO".

enter image description here

276
Rajneesh071

Ajoutez les éléments suivants à votre Info.plist:

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

Image

188
Shekhar Gupta

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

ça marche pour moi

111
Hitesh Vaghela

Dans la Pliste, 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 masquée.

33

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)
}
27
Rajesh Loganathan

J'ai fait ce qui suit et cela semble fonctionner (même sous 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;
}
14
smartbot
  • UIApplication.setStatusBarX est obsolète à partir de 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 quand un UINavigationController est impliqué:

  • Si navigationBarHidden = true, les enfants preferredStatusBarX de UIViewController sont appelés, car l'enfant affiche le contenu dans la barre d'état.
  • Si navigationBarHidden = false, les fichiers preferredStatusBarX de votre UINavigationController sont appelés, après tout, il affiche le contenu dans la barre d'état.
  • PreferredStatusBarStyle par défaut, UINavigationController, utilise la valeur de UINav.navigationBar.barStyle. .Default = contenu de la barre d'état noir, .Black = contenu de la barre d'état blanc.
  • Par conséquent, si vous définissez barTintColor sur une couleur personnalisée (ce qui est probablement le cas), vous devez également définir barStyle sur .Black pour obtenir le contenu en blanc de la barre d'état. Je mettrais barStyle en noir avant de définir barTintColor, au cas où barStyle se substituerait à barTintColor.
  • Une alternative est que vous pouvez sous-classer UINavigationController plutôt que de jouer avec le style barre.
  • CEPENDANT, 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 à UINavigationController dans cette situation. J'aurais pensé que cela devrait être la responsabilité du contrôleur UINavigation de demander à l'enfant> hausse les épaules <.
  • Et affiché modalement, UIViewController n’a son mot à dire dans la barre d’état que si modalPresentationStyle = .FullScreen.
  • Si vous disposez d'un contrôleur de vue modale de style de présentation personnalisé et que vous souhaitez réellement contrôler la barre d'état, vous pouvez définir modalPresentationCapturesStatusBarAppearance = true.
12
Chris

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

  1. dans application: (UIApplication *) application didFinishLaunchingWithOptions: (NSDictionary *) launchOptions write

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

     View-Controller Based Status Bar Appearance = NO
    
9
Shaik Riyaz

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

App avant toute modification

enter image description here

Trouvé dans votre dossier Project Navigator nommé Supporting Files et cliquez sur le fichier * .plist

enter image description here

Après que vous aurez différents paramètres de votre application a montré. Vous devez ajouter 2 clés UIStatusBarHidden et UIViewControllerBasedStatusBarAppearance. Vous pouvez le faire simplement en cliquant sur le bouton +

enter image description here

Après avoir appuyé sur +, vous pouvez choisir l’une des touches. Il suffit de commencer à taper.

Version correcte:

enter image description here

Et enfin application après application de ces modifications:

enter image description here

En outre, vous pouvez trouver une solution alternative ici

8
gbk

Essayez ça

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
7
Kemal Can Kaynak

Dans iOS10, tout ce que je devais faire, c'est remplacer la prefersStatusBarHidden var dans mon RootViewController (Swift):

override var prefersStatusBarHidden: Bool {
    return true
}
7
andrewz

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 aussi (iOS7 +):

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

Vous devez également appeler:

setNeedsStatusBarAppearanceUpdate()

en dire viewDidLoad().

Notez que si vous utilisez un contrôleur SplitView, ou un autre contrôleur de vue container, vous devez également le renvoyer à votre classe lorsqu'il est envoyé childViewControllerForStatusBarHidden. Une façon de faire est d'avoir une variable publique faible pour dire statusController et de la renvoyer dans cette méthode remplacée.

5
Esqarrouth

Pour masquer votre barre d'état dans iOS7:

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

5
Manju

iOS 9 et suivants:

Comme la méthode statusBarHidden était obsolète depuis iOS9 , vous devez ajoutez deux valeurs dans plist comme ci-dessous:

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

ou par interface utilisateur s'il vous plaît refre image ci-dessous:

enter image description here

Comme statusBarHidden est obsolète depuis iOS9 :

@property (readwrite, nonatomic, getter = isStatusBarHidden) BOOL statusBarHidden NS _ OBSOLÈTE _ IOS (2_0, 9_0 , "Utilisez - [UIViewController prefersStatusBarHidden]") __TVOS_PROHIBITED;

4
Ketan P

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

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

enter image description here

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

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

    override var prefersStatusBarHidden: Bool {
        return isStatusBarHidden
    }

Vous pouvez appeler isStatusBarHidden = true et isStatusBarHidden = false où vous voulez hide/show barre d'état

4
MANISH PATHAK

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

4
bLacK hoLE

Étapes pour masquer la barre d'état sous iOS
1. ouvrir le fichier AppDelegate.m, ajouter 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 régler

View controller-based status bar appearance set NO

4
Ashu

Pour répondre à la question de Susitha: utilisez setNeedsStatusBarAppearanceUpdate. Cela fera un appel à prefersStatusBarHidden pour l'actualiser 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 le nom de votre choix) sur NO. Appelez preferStatusBarHidden indirectement en passant un autre appel à

[self setNeedsStatusBarAppearanceUpdate]
2
smileBot

Swift 5

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

  1. Ouvrir sur Info.plist.
  2. Ajouter une nouvelle clé Afficher l'apparence de la barre d'état basée sur le contrôleur et la valeur définie sur NO.
  3. Ajouter une nouvelle clé La barre d'état est initialement masquée et sa valeur est définie sur YES.
  4. Re-compiler le projet.
  5. La barre d'état devrait maintenant être cachée sur le téléphone iOS.

Capture finale des paramètres:

Final Settings

Cela fonctionne sur Xcode 10.2

2
Jerry Chong

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);

Donc, devrait définir View controller-based status bar appearance à NO

2
Tony

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

1
Prazgaitis