So blenden Sie die iOS-Statusleiste aus


219

In meiner iOS-Video-App ist die Statusleiste in einigen View-Controllern ausgeblendet. Ich habe dies mit folgendem Code gemacht.

[[UIApplication sharedApplication] setStatusBarHidden:YES];
  • Es funktioniert für iOS 5 und iOS 6, jedoch nicht für iOS 7.

  • Ich habe mit diesem insbesondere View Controller versucht,

Z.B:

-(BOOL)prefersStatusBarHidden { return YES; }

Es funktioniert gut, aber ich kann die Statusleiste im übergeordneten Ansichts-Controller nicht mehr anzeigen.



1
Wenn der Statusleistenstil im Storyboard festgelegt ist, muss der Stil nach dem Ändern der "View Controller-basierten Statusleiste" (unten) möglicherweise in der Liste festgelegt werden, da die Ansichtssteuerungseinstellung nicht mehr verwendet wird. stackoverflow.com/questions/18924345/…
Matt

1
Ich antwortete in einer anderen Frage. Versuche dies. [der einfachste Weg, die Statusleiste programmgesteuert auszublenden] [1] [1]: stackoverflow.com/a/27339754/3718498
wataru

1
Ich habe einen Trick dafür verwendet - ich habe ihn als pod cocoapods.org/pods/UIViewController+ODStatusBar veröffentlicht , ich hoffe, er wird für jeden nützlich sein
Alex Nazarsky

Die Antworten hier sind jetzt veraltet. Ich hatte Probleme, die richtige Antwort für iOS 9 zu finden, als ich die Statusleiste FÜR NUR DEN STARTBILDSCHIRM ausgeblendet habe. Wenn Sie also unten verlinken, ist es hoffentlich für andere einfacher, dies zu tun: stackoverflow.com/questions/34413848/…
Ben

Antworten:


277

Sie sollten diesen Wert zu plist hinzufügen: " Controller-basiertes Statusleisten-Erscheinungsbild anzeigen " und auf " NEIN " setzen.

Geben Sie hier die Bildbeschreibung ein


40
Als Referenz ist der UIViewControllerBasedStatusBarAppearance
Rohschlüssel

1
@ Rajneesh071 Was muss ich tun, wenn ich den bevorzugten StatusBarStyle für die Arbeit festlegen möchte, die ich benötige "View controller-based status bar appearance" set it to "YES".?
Bimawa


Vor welchem ​​Problem stehen Sie?
Rajneesh071

scheint veraltet, wird Ihre App brechen
Ben

194

Fügen Sie Ihrer Info.plist Folgendes hinzu:

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

Bild


Funktioniert hervorragend in Xcode 11.3, iOS 13
Wayne Henderson

113

Fügen Sie die folgende Zeile in viewdidload hinzu

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

und neue Methode hinzufügen

  - (BOOL)prefersStatusBarHidden {
          return YES;
  }

Ändern Sie auch die Datei info.plist. Zeigen Sie das Erscheinungsbild der Controller-basierten Statusleiste an. "= NO

es funktioniert für mich


Vielen Dank, dass dieser für mich funktioniert, aber ich muss auch die folgende Zeile in der Liste hinzufügen. "Anzeigen der Controller-basierten Statusleiste" = NEIN i, e Fügen Sie die folgende Zeile in viewdidload hinzu. [[UIApplication sharedApplication] setStatusBarHidden: YES withAnimation: UIStatusBarAnimationFade]; und neue Methode hinzufügen - (BOOL) bevorzugtStatusBarHidden {return YES; } Fügen Sie "View controller-based status bar Erscheinungsbild" = NO in Plist file
sandy

prefersStatusBarHiddenist das, was der Trick für mich getan hat (ob mit dieser Lösung oder mit anderen ähnlichen)
Abdo

34

Fügen Sie in der Liste die folgenden Eigenschaften hinzu.

Status bar is initially hidden = YES

View controller-based status bar appearance = NO

Jetzt wird die Statusleiste ausgeblendet.


8
Rohschlüssel wären UIStatusBarHidden und UIViewControllerBasedStatusBarAppearance
Leolobato

27

Versuchen Sie diese einfache Methode:


Ziel 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];
}

Schnell:

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
Das war eine wundervolle Antwort! Probieren Sie es auch mit den verschiedenen UIStatusBarAnimations, sie sind ziemlich toll.
VedTopkar

Vergiss nicht [super viewWillAppear:animated]und[super viewWillDisappear:animated]
SamB

1
Diese einfache Lösung funktionierte für mich mit iOS 10. Ein einfacher Mann!
coolcool1994

14

Ich habe folgendes getan und es scheint zu funktionieren (sogar in 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 ist ab iOS9 veraltet
  • Es ist veraltet, UIViewControllerBasedStatusBarAppearance = NO in Ihrer info.plist zu haben
  • Daher sollten wir in allen unseren View-Controllern PreferredStatusBarX verwenden

Interessanter wird es jedoch, wenn ein UINavigationController beteiligt ist:

  • Wenn navigationBarHidden = true ist, wird der bevorzugteStatusBarX des untergeordneten UIViewController aufgerufen, da das untergeordnete Element den Inhalt in der Statusleiste anzeigt.
  • Wenn navigationBarHidden = false ist, werden die bevorzugten StatusBarX des UINavigationControllers aufgerufen, schließlich wird der Inhalt in der Statusleiste angezeigt.
  • Der standardmäßig bevorzugte StatusBarStyle des UINavigationControllers verwendet den Wert von UINav.navigationBar.barStyle. .Default = schwarzer Statusleisteninhalt, .Black = weißer Statusleisteninhalt.
  • Wenn Sie also barTintColor auf eine benutzerdefinierte Farbe einstellen (was wahrscheinlich der Fall ist), müssen Sie barStyle auch auf .Black setzen, um den Inhalt der weißen Statusleiste zu erhalten. Ich würde barStyle auf schwarz setzen, bevor ich barTintColor einstelle, falls barStyle die barTintColor überschreibt.
  • Eine Alternative besteht darin, dass Sie UINavigationController unterordnen können, anstatt mit dem Balkenstil herumzuspielen.
  • Wenn Sie jedoch UINavigationController unterordnen, erhalten Sie keine Kontrolle über die Statusleiste, wenn navigationBarHidden = true ist. Irgendwie geht UIKit direkt zum untergeordneten UIViewController, ohne den UINavigationController in dieser Situation zu fragen. Ich hätte gedacht, es sollte in der Verantwortung des UINavigationControllers liegen, das Kind> Achselzucken <zu fragen.
  • Und modal angezeigte UIViewController erhalten nur dann ein Mitspracherecht in der Statusleiste, wenn modalPresentationStyle = .FullScreen.
  • Wenn Sie einen benutzerdefinierten Modal View Controller im Präsentationsstil haben und wirklich möchten, dass er die Statusleiste steuert, können Sie modalPresentationCapturesStatusBarAppearance = true festlegen.

Warum kann Apple nicht einfach einem Rat folgen? Wenn es nicht kaputt ist, reparieren Sie es nicht!
Jargen89

9

Um die Statusleiste in iOS7 auszublenden, benötigen Sie 2 Codezeilen

  1. in Anwendung: (UIApplication *) Anwendung didFinishLaunchingWithOptions: (NSDictionary *) launchOptions write

     [[UIApplication sharedApplication] setStatusBarHidden:YES];
    
  2. in info.plist füge dies hinzu

     View-Controller Based Status Bar Appearance = NO
    

8

Fügen Sie zum besseren Verständnis einige Fotos mit Kommentaren hinzu:

App vor Änderungen

Geben Sie hier die Bildbeschreibung ein

Finden Sie in Ihrem Project NavigatorOrdner mit dem Namen Supporting Filesund klicken Sie auf * .plist Datei

Geben Sie hier die Bildbeschreibung ein

Nachdem Sie eine andere Einstellung Ihrer App erhalten haben, wird diese angezeigt. Sie müssen 2 Schlüssel UIStatusBarHiddenund hinzufügen UIViewControllerBasedStatusBarAppearance. Klicken Sie dazu einfach auf die Schaltfläche +

Geben Sie hier die Bildbeschreibung ein

Nach dem Drücken von + können Sie eine der Tasten auswählen - beginnen Sie einfach mit der Eingabe.

Korrekte Version:

Geben Sie hier die Bildbeschreibung ein

Und schließlich Anwendung nach Anwendung dieser Änderungen:

Geben Sie hier die Bildbeschreibung ein

Sie können aber auch alternative Lösung finden hier


8

In iOS10 musste ich nur die Variable prefersStatusBarHiddenin meinem RootViewController(Swift) überschreiben :

override var prefersStatusBarHidden: Bool {
    return true
}

7

Versuch das;

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

Toll. Ich konnte dies verwenden, um die Statusleiste auf dem View Controller auszublenden, auf dem sie nicht benötigt wurde, und sie dann wieder einzublenden, sobald sich der Benutzer angemeldet hatte.
LondonGuy

5

So verbergen Sie Ihre Statusleiste in iOS7:

Öffnen Sie Ihre Plist-Datei, fügen Sie eine Zeile mit dem Namen "Controller-basiertes Erscheinungsbild der Statusleiste anzeigen" hinzu und setzen Sie den Wert auf NO.


5

Hier ist die Swift-Version (vor 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)
}

Dies funktioniert auch (iOS7 +):

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

Sie müssen auch anrufen:

setNeedsStatusBarAppearanceUpdate()

in sagen viewDidLoad().

Beachten Sie, dass Sie bei Verwendung eines SplitView-Controllers oder eines anderen containerView-Controllers beim Senden auch Ihre Klasse zurückgeben müssen childViewControllerForStatusBarHidden. Eine Möglichkeit, dies zu tun, besteht darin, beispielsweise eine öffentliche schwache Variable zu statusControllerhaben und diese in dieser überschriebenen Methode zurückzugeben.


1
Der oberste Block ist in iOS8 veraltet - verwenden Sie Ihren zweiten Ansatz. Und danke! Ich habe den Code bearbeitet, um einen weiteren obligatorischen Aufruf hinzuzufügen.
David H

5

Ab iOS 9:

Da die statusBarHiddenMethode von iOS9 veraltet war, müssen Sie zwei Werte in plist wie folgt hinzufügen:

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

oder per Benutzeroberfläche Bitte siehe Bild unten:

Geben Sie hier die Bildbeschreibung ein

Wie statusBarHiddenwird Veraltete von iOS9 :

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


5

FESTE LÖSUNG FÜR SWIFT 3+ (iOS 9, 10)

1- In info.plist unter Eigenschaft setzen

Geben Sie hier die Bildbeschreibung ein

2- Fügen Sie den folgenden Code in den Root-Controller ein

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

    override var prefersStatusBarHidden: Bool {
        return isStatusBarHidden
    }

Sie können anrufen isStatusBarHidden = trueund isStatusBarHidden = falsewo Sie hide/showStatusleiste möchten


4

Sie sollten diesen Wert zu plist hinzufügen: "Controller-basiertes Statusleisten-Erscheinungsbild anzeigen" und auf "NEIN" setzen.


4

Schritte zum Ausblenden der Statusleiste in iOS
1. Öffnen Sie die Datei AppDelegate.m und fügen Sie application.statusBarHidden in der didFinishLaunchingWithOptions-Methode hinzu

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    application.statusBarHidden = YES;
    return YES;
    }
  1. info.plist öffnen und einstellen

View controller-based status bar appearance einstellen NO


4

Swift 5

Führen Sie die folgenden Schritte aus, um die iOS-Statusleiste auszublenden:

  1. Öffnen Sie auf Info.plist.
  2. Neuen Schlüssel hinzufügen Controller-basiertes Statusleisten-Erscheinungsbild anzeigen und Wert auf NO gesetzt .
  3. Neuen Schlüssel hinzufügen Die Statusleiste wird zunächst ausgeblendet und der Wert auf JA gesetzt .
  4. Projekt neu kompilieren.
  5. Die Statusleiste sollte jetzt auf dem iOS-Telefon ausgeblendet sein.

Screenshot der endgültigen Einstellungen:

Endgültige Einstellungen

Dies funktioniert unter Xcode 10.2


2

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

Also sollte View controller-based status bar appearanceauf NO gesetzt werden


2

Um die Frage der Susitha zu beantworten: Verwenden Sie setNeedsStatusBarAppearanceUpdate . Dadurch wird prefersStatusBarHidden aufgerufen, um mit dem gewünschten Statusleistenstatus zu aktualisieren. Versuche dies:

    @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];
    }

Wenn Sie die Statusleiste erneut anzeigen möchten, setzen Sie Ihre Eigenschaft hideStatusBar (oder wie auch immer Sie sie nennen) auf NO. Rufen Sie PreferStatusBarHidden indirekt auf, indem Sie einen weiteren Anruf bei tätigen

[self setNeedsStatusBarAppearanceUpdate]

1

Update für Swift 3:

Aktualisieren Sie Info.plist mit den folgenden Informationen:

View controller-based status bar appearance: NO

Dann in einem ViewController oder anderswo:

UIApplication.shared.isStatusBarHidden = true

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.