webentwicklung-frage-antwort-db.com.de

Wie kann ich unter iOS 7 die Statusleiste im laufenden Betrieb ein- und ausblenden?

Angenommen, ein Benutzer befindet sich in einem View Controller und möchte in einen "Vollbildmodus" -Modus wechseln, in dem die Statusleiste ausgeblendet ist. Unter iOS 6 war dies ein einfacher Methodenaufruf, um die Statusleiste auszublenden/anzuzeigen unter iOS 7 bestehen bleiben.

Ich habe Lösungen wie diese gesehen:

- (BOOL)prefersStatusBarHidden {
    return YES;
}

Dies erlaubt es jedoch nicht, zur Laufzeit umzuschalten. (Es akzeptiert keine Argumente.)

In meiner info.plist habe ich View controller-based status bar appearance auf NO gesetzt.

Ich bin am Ende. Wie kann ich es verstecken?

26
Doug Smith

Swift 4

show:

(UIApplication.shared.value(forKey: "statusBarWindow") as? UIWindow)?.isHidden = false

verbergen:

(UIApplication.shared.value(forKey: "statusBarWindow") as? UIWindow)?.isHidden = true



Ziel c

Nun, hier ist eine Möglichkeit, dies zu tun:

in myViewController.h 

@interface myViewController : UIViewController {
    BOOL shouldHideStatusBar;
}

Dann in myViewController.m

- (void)viewDidLoad {
    [super viewDidLoad];
    shouldHideStatusBar = YES;
}

- (BOOL)prefersStatusBarHidden {
    return shouldHideStatusBar;
}

und lassen Sie uns sagen, wenn ich den Bildschirm berührte, sollte jetzt die Statusleiste angezeigt werden. Sie müssen Folgendes anrufen: setNeedsStatusBarAppearanceUpdate, damit dies funktioniert, und dann einen Schalter (in diesem Fall bool), um anzuzeigen/auszublenden.

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    shouldHideStatusBar = (shouldHideStatusBar)? NO: YES;
    [self setNeedsStatusBarAppearanceUpdate];
}

setNeedsStatusBarAppearanceUpdate

Dies sollte immer dann aufgerufen werden, wenn die Rückgabewerte für die Sicht Die Statusleisten-Attribute des Controllers haben sich geändert. Wenn es von .__ aufgerufen wird. Innerhalb eines Animationsblocks werden die Änderungen zusammen mit dem .__ animiert. Rest des Animationsblocks.

prefersStatusBarHidden:

Rückgabewert Ein boolescher Wert von YES gibt an, dass die Statusleiste .__ sein soll. versteckt. Der Standardwert ist NO.

Diskussion Wenn Sie den Rückgabewert für diese Methode ändern, rufen Sie die .__ auf. setNeedsStatusBarAppearanceUpdate-Methode.

Festlegen, dass ein untergeordneter View-Controller bevorzugt Statusleiste versteckt/nicht ausgeblendet, implementieren Sie die childViewControllerForStatusBarHidden-Methode.


Wenn Sie planen, dass Ihre App auch mit iOS 6 arbeitet, möchten Sie vielleicht in diesem Beitrag nachsehen.

74
John Riselvato

Ich hatte Probleme mit einigen anderen Antworten in iOS 8, also recherchierte ich etwas und fand: [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:NO];. Sie können dann die Animation aktivieren/deaktivieren.

3
Johann Burgess

Empfehlung

Für die Unterstützung von iOS7 würde ich vorschlagen, dass Sie die Anzeige der Controller-Statusleiste auf YES zurückstellen. Auf diese Weise können Sie die Statusleisten im Code steuern. Der iOS-Übergangsleitfaden ( link ) bietet weitere Optionen zum Verwalten der Statusleiste (es gibt hier nicht nur eine einzige Korrektur, sondern eine Reihe von Einstellungen, die sicherstellen, dass Sie das bekommen, was Sie möchten). Beachten Sie auch, dass Sie Ihre Storyboards oder Nib-Dateien auch dann aktualisieren möchten, wenn Sie das Erscheinungsbild im Code festlegen, damit sie Ihrem Standard-Erscheinungsbild entsprechen. Andernfalls kann die Statusleiste vorübergehend blinken. . Ich würde empfehlen, dass Sie den Code festlegen, bevor die Ansicht angezeigt wird.

Nachdem Sie Ihre plist-Eigenschaft auf YES gesetzt haben: Stellen Sie sicher, dass diese Methode in UIViewController vorhanden ist, wo die Statusleiste ausgeblendet werden soll:

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

Statusleiste anzeigen

Geben Sie Nein ein, wenn die Statusleiste in jedem Ansichts-Controller angezeigt werden soll.

Es kann eine Reihe anderer Probleme mit der Statusleiste geben:

Alternativer Ansatz

Gemäß der Apple-Dokumentation können Sie eine andere Methode zum Verwalten der Statusleiste verwenden, indem Sie die UIApplication-Methode verwenden, die in der nachstehenden Referenz angegeben ist ( link ). setStatusBarHidden ist bei Verwendung dieses Ansatzes weiterhin funktionsfähig.

Option #2

Mit dieser Option können Sie die Eigenschaften der UIApplication-Klasse weiterhin verwenden, wenn Sie der oben genannten Einstellung für plist folgen.

UIApplication Status

Proben

Sie finden Codebeispiele für die oben erwähnte Alternative der Statusleiste in:

2
Tommie C.

Wenn der auf dem Bildschirm angezeigte View-Controller der Root-View-Controller ist, sollten Sie die Funktion nur implementieren können 

- (BOOL)prefersStatusBarHidden {
    return _showStatusBar;
}

wenn _showStatusBar eine BOOL ist, rufen Sie bei jeder Änderung dieser Eigenschaft [self setNeedsStatusBarAppearanceUpdate] auf.

Wenn der View-Controller in einem anderen Element enthalten ist, d. H. Einer UINavigationController, müssen Sie zuerst die Methode - (UIViewController *)childViewControllerForStatusBarHidden auf dem übergeordneten Controller implementieren und die aktuell dargestellte View-Controller-Instanz zurückgeben.

Dies ist alles, wenn View controller-based status bar appearance auf YES gesetzt ist.

0
Evan