webentwicklung-frage-antwort-db.com.de

IOS7-Statusleiste auf ausgewählten Controllern ein- / ausblenden

Ich möchte die Statusleiste auf einigen Controllern ein- und ausblenden. Ist dies möglich oder eher eine allgemeine App-Einstellung?.

Ich habe viele Posts/Fragen zum plist-Update gesehen:

View controller-based status bar appearance - NO

Wenn dies abgeschlossen ist, welche Kontrolle wird dann gegeben?

Ich möchte die Statusleiste auf dem Hauptbildschirm der Anwendung anzeigen. Aber zum Beispiel in einem Seitenmenü, das ich nicht anzeigen möchte, ist dies möglich? Kann dies in IB oder Code geändert werden?

BEARBEITEN - Ich verwende eine https://github.com/edgecase/ECSlidingViewController Implementierung.

Der Hauptcontroller (auf der ersten Seite) sollte die Statusleiste anzeigen, der linke Menücontroller, wenn er verschoben wird, nicht.

Ich glaube, das Problem ist, dass beide innerhalb des gleichen Root-Controllers (Sliding View Controller) sitzen, so dass es schwierig ist, abzuschließen.

Ideal, wenn der Startbildschirm (Hauptseite) die Statusleiste mitnehmen könnte, wenn er verschiebt, was am besten aussehen würde.

44
StuartM

Die plist Einstellung "View controller-based status bar appearance" steuert nur, ob für iOS 7 eine Einstellung pro Controller angewendet werden soll.

Wenn Sie diese Plist-Option auf NO setzen, müssen Sie die Statusleiste wie folgt manuell aktivieren und deaktivieren (wie es bis iOS 6 war):

[[UIApplication sharedApplication] setStatusBarHidden:YES]

Wenn Sie diese Plist-Option auf YES setzen, können Sie diese Methode zu jedem Ihrer viewController hinzufügen, um die statusBar unabhängig für jeden Controller festzulegen (was besonders hilfreich ist, wenn Sie ein intelligentes Unterklassensystem von viewControllern haben).

- (BOOL)prefersStatusBarHidden {
    return YES;
}

Bearbeiten:

es gibt zwei weitere Methoden, die von Interesse sind, wenn Sie das neue viewController-basierte Erscheinungsbild der Statusleiste auswählen:

Erzwinge eine Aktualisierung der Statusleiste mit:

[self setNeedsStatusBarAppearanceUpdate]

Wenn Sie verschachtelte Controller haben (z. B. einen contentViewController in einer TabBarController-Unterklasse), fragt Ihre TabBarController-Unterklasse möglicherweise den aktuellen childViewController und leitet diese Einstellung weiter. Ich denke, in Ihrem speziellen Fall könnte dies von Nutzen sein:

- (UIViewController *)childViewControllerForStatusBarHidden {
     return _myChildViewController;
}
- (UIViewController *)childViewControllerForStatusBarStyle {
     return _myOtherViewController;
}
128
auco

Implementieren Sie unter iOS 7 und höher einfach -prefersStatusBarHidden, zum Beispiel in einem UIViewController, das die Statusleiste verbergen soll:

- (BOOL)prefersStatusBarHidden {
    return YES;
}

Der Standardwert ist NO.

14
Mojo66

Swift:

override var prefersStatusBarHidden: Bool {
    return true
}
14
Danut Pralea

Sie können die Statusleiste in einem Animationsblock auch ein-/ausblenden, indem Sie den Animationscode in die didSet-Eigenschaft der Variablen einfügen, die beschreibt, ob sie ein- oder ausgeblendet werden soll. Wenn Sie einen neuen Wert für den Bool statusBarHidden festlegen, wird automatisch die animierte Aktualisierung der Statusleiste für die von Ihnen gewählte Dauer ausgelöst.

/// Swift 3 syntax: 

var statusBarHidden: Bool = true {
    didSet {
        UIView.animate(withDuration: 0.5) { () -> Void in
            self.setNeedsStatusBarAppearanceUpdate()
        }
    }
}

override var prefersStatusBarHidden: Bool {
    return statusBarHidden
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)        
    statusBarHidden = false // show statusBar, animated, by triggering didSet block
}
4
Natalia

Schnelle Version von Mojo66 's Antwort :

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