In meiner .plist-Datei ist "Erscheinungsbild der Controller-basierten Statusleiste anzeigen " eingestellt NO
. Aber danach UIImagePickerController
verhält sich meine App so, als ob die Option auf gesetzt wäre YES
.
In meiner App präsentiere ich eine VC, die eine präsentiert UIImagePickerController
.
Das Problem passiert folgendermaßen:
- Nach der Präsentation der Fotoauswahl ändert sich beim Auswählen einer Fotobibliothek die Farbe des Textes in der Statusleiste.
- Sobald dies beendet
UIImagePickerController
ist, ändert sich der Abstand der Statusleiste für den Rest meiner App und die gesamte Navigationsleiste für andere Controller wird unter der Statusleiste angezeigt.
Gibt es eine Möglichkeit, dies zu lösen, ohne die Statusleiste in meinen View Controllern zu verwalten?
Antworten:
Keine der oben genannten Lösungen hat bei mir funktioniert, aber durch die Kombination der Antworten von Rich86man und iOS_DEV_09 habe ich eine konsistent funktionierende Lösung:
und
In Bezug auf diese tolle Lösung. Für 2014 / iOS8 habe ich in einigen Fällen festgestellt, dass Sie AUCH einschließen müssen
prefersStatusBarHidden
und möglicherweisechildViewControllerForStatusBarHidden
...Hoffe es hilft jemandem
quelle
Ich stand heute vor dem gleichen Problem. Hier ist meine Lösung.
Legen Sie sich im Ansichtscontroller, der die Bildauswahl aufruft, als Delegat der Bildauswahl fest. (Du machst das wahrscheinlich schon)
Da UIImagePickerController eine Art Navigationscontroller ist, legen Sie sich auch als UINavigationController-Delegat fest. Dann :
Ersetzen Sie UIStatusBarStyleLightContent durch den gewünschten Stil.
quelle
Die akzeptierte Antwort funktioniert, wenn Sie in Ihrer .plist-Datei die Option "Controller-basiertes Statusleisten-Erscheinungsbild anzeigen" auf NEIN gesetzt haben. Wenn Sie in der Tat die Statusleiste in einigen anderen Ansichtscontrollern steuern und diese Option auf JA setzen müssen, können Sie UIImagePickerController auf andere Weise korrekt verhalten, indem Sie sie in Unterklassen unterteilen
quelle
Ich stand vor dem gleichen Problem.
Hier ist meine Lösung. Fügen Sie dies in viewWillAppear des View Controllers ein, von dem aus Sie die Bildauswahlansicht öffnen
quelle
Kannst du das versuchen? Ich denke, brauchtStatusBarApperanceUpdate wird funktionieren.
quelle
Ich fand, dass dies eine ordnungsgemäße Handhabung bietet. Es gibt zwei Teile.
Der UIImagePickerController selbst präsentiert Ansichtscontroller, sodass dieser Delegat für alle Präsentatoren auf dem Stapel funktioniert.
Der viewWillAppear stellt sicher, dass dieser Ansichts-Controller selbst immer zurückgesetzt wird, wenn ein präsentierender Ansichts-Controller darüber geschlossen wird.
quelle
Ich hatte das gleiche Problem. Info-Liste hinzufügen: "Aussehen der Controller-basierten Statusleiste anzeigen" mit dem Wert "NEIN"
Beispiel hier https://stackoverflow.com/a/19211669
Diese Lösung funktioniert bei mir.
quelle
Dies ist wahrscheinlich ein Fehler. Ich habe das Problem gelöst, indem ich "View Controller-based Status Bar Erscheinungsbild" auf YES gesetzt und in jedem View Controller den folgenden Code eingefügt habe:
Dann verhält sich meine App wie erwartet.
quelle
Zum Ausblenden der Statusleiste in UIImagePicker:
- -
Wenn UIImagePicker geschlossen wird, um die Statusleiste im View Controller auszublenden, verwenden Sie den folgenden Code:
quelle
Versuche dies ....
Dies funktioniert in beiden Fällen, dh ob Sie presentModalViewController und pushViewController verwenden
Methoden delegieren
quelle
All das hat bei mir nicht funktioniert. Ich habe das Problem gelöst, indem ich den Präsentationsstil geändert habe in:
quelle
Keine der oben genannten Lösungen hat bei mir funktioniert.
Ich präsentiere UIImagePickerController als Modal View Controller. Nach dem Schließen von UIImagePickerController lautete der Statusleistenstatus:
Die Lösung, die das Problem für mich behoben hat, war die Wiederherstellung von statusBarOrientation nach dem Schließen von UIImagePickerController:
quelle
Dieser Code hat mir geholfen, den Stil der Statusleiste anzupassen.
BEARBEITEN: Diese Lösung funktioniert, wenn "Controller-basiertes Statusleisten-Erscheinungsbild anzeigen" == JA
quelle
Alle obigen Antworten sind in Ordnung und können helfen.
Ich hatte das gleiche Problem mit der Verwaltung der Anwendung, die unter verschiedenen iOS-Versionen ausgeführt wurde .
Dann im Delegierten:
quelle
Noch eine andere Lösung, die in einigen Situationen funktionieren kann.
quelle
Haben Sie versucht anzurufen,
[self setNeedsStatusBarAppearanceUpdate]
wenn Ihr Präsentations-View-Controller wieder angezeigt wird?quelle
Ich versuche, die Statusleiste in UIImagePickerController in iOS7 auszublenden, weiß aber immer noch nicht, wie das geht. ich benutze
im ViewController, der den UIImagePickerController aufruft, und setzen Sie in der plist-Datei "View controller-based status bar display = NO". Hoffe das kann helfen.
quelle
Versuche dies :
Verwenden Sie im Protokollimplement Folgendes:
quelle
Das hat es für mich gelöst ...:
quelle
Nichts hier hat das Problem speziell behoben, das ich hatte (und vielleicht auch das OP), also dachte ich, ich würde meine Antwort teilen. Anstatt die Statusleiste auszublenden, was ich für eine fehlerhafte Lösung halte (ich bemerkte, dass meine App manchmal in einem Zustand belassen wurde, in dem die Statusleiste ausgeblendet war, wenn dies nicht der Fall sein sollte). Ich habe mich stattdessen dafür entschieden, nett mit dem zu spielen
UIStatusBarStyles
.Wenn die Ansicht des UIImagePickerControllers angezeigt wird, habe ich den Statusleistenstil auf Standard gesetzt, da die Standardhintergrundfarbe hellgrau ist.
Wenn der Bildwähler dann geschlossen wird, setze ich ihn wieder auf
UIStatusBarStyleLightContent
.quelle
In diesem Fall verwenden wir 2 Schritte
Im ersten Schritt: In info.plist hinzufügen: "Controller-basiertes Statusleisten-Erscheinungsbild anzeigen" mit dem Wert "NO"
Im zweiten Schritt: Verwenden / Aufrufen dieses Codes mit dem Delegaten von UIImagePickerController
Im Falle von IOS-7 fügen Sie eine weitere Funktion hinzu
quelle
Ab iOS 8.1 scheinen sie diesen Fehler endlich behoben zu haben! Ich konnte alle von mir verwendeten Problemumgehungen aus meinem Code entfernen.
quelle
Bei Verwendung des Standardverhaltens von iOS 8 hatte ich Probleme mit der Statusleiste, die angezeigt wurde, als ich sie ausblenden wollte.
Die Lösung, die ich fand, war, dass ich direkt nach dem Aufruf
presentPopover
von meinem View Controller Folgendes tat:Ich musste dies auch meinem Hauptansichts-Controller hinzufügen:
quelle
Ich hatte dieses Problem und konnte es lösen, indem ich einfach eine einzelne Delegatenfunktion implementierte. Der Hintergrund meiner Statusleiste ist schwarz, daher lautet UIStatusBarStyle für meine Anwendung .LightContent. Als ich den UIImagePickerController vorstellte, um ein Foto aus dem Gerätespeicher auszuwählen, war die Statusleiste in Ordnung. Beim Klicken in ein Verzeichnis wie "Kamerarolle" oder "Favoriten", das effektiv auf den Navigationsstapel verschoben wurde, verschwand die Statusleiste. Bei der Auswahl eines Fotos gab es überhaupt keine Statusleiste. Beim Entfernen eines anderen Modal View Controllers war nur die Batterie vorhanden, was darauf hinweist, dass der Rest der Statusleiste möglicherweise ebenfalls schwarz ist.
Ich habe einige der anderen Lösungen ausprobiert, z. B. die Erweiterung von UIImagePickerController, aber in Swift können Sie die Verwendung von Erweiterungen nicht überschreiben. Ich habe dann versucht, UIImagePickerController in eine Unterklasse zu unterteilen, die Statusleiste in viewWillAppear () auszublenden und die Statusleiste in viewWillDisappear auszublenden. Ich konnte sehen, wie die Statusleiste mit einer .Slide-Animation ausgeblendet wurde, aber da die Statusleiste bei Auswahl eines Verzeichnisses unsichtbar war, konnte ich die Statusleiste nicht einblenden sehen. Wieder kam die grüne Batterie mit dem Rest der Statusleiste zurück, der beim Entlassen eines Modal View Controllers unsichtbar war. Ich habe auch versucht, prefersStatusBarHidden () zu überschreiben, aber diese Funktion wurde nie aufgerufen. Deshalb habe ich versucht, setNeedsStatusBarAppearanceUpdate () aufzurufen, um sicherzustellen, dass prefersStatusBarHidden () vom System aufgerufen wird, aber immer noch nicht aufgerufen wird. Ebenfalls, Es gibt den Vorschlag, die Statusleiste so einzustellen, dass sie in der Delegatmethode navigationController willShowViewController ausgeblendet wird. Dies bedeutet wiederum nur, dass die Statusleiste ausgeblendet wird, wodurch das Problem nicht gelöst wird. Wie sich herausstellt, scheint sich der Stil der Statusleiste beim Drücken auf den Navigationsstapel des UIImagePickerController zu ändern. Um das Problem vollständig zu lösen, musste ich keine Erweiterungen oder Unterklassen UIImagePickerController schreiben. Sie müssen lediglich den Delegaten und den Statusleistenstil so einstellen, dass er unverändert bleibt. Dieser Zusatz machte es so, als ob das Problem nie existierte. Es scheint, dass der Stil der Statusleiste beim Drücken auf den Navigationsstapel des UIImagePickerController geändert wird. Um das Problem vollständig zu lösen, musste ich keine Erweiterungen oder Unterklassen UIImagePickerController schreiben. Sie müssen lediglich den Delegaten und den Statusleistenstil so einstellen, dass er unverändert bleibt. Dieser Zusatz machte es so, als ob das Problem nie existierte. Es scheint, dass der Stil der Statusleiste beim Drücken auf den Navigationsstapel des UIImagePickerController geändert wird. Um das Problem vollständig zu lösen, musste ich keine Erweiterungen oder Unterklassen UIImagePickerController schreiben. Sie müssen lediglich den Delegaten und den Statusleistenstil so einstellen, dass er unverändert bleibt. Dieser Zusatz machte es so, als ob das Problem nie existierte.
quelle
Ich habe tatsächlich eine bessere Möglichkeit gefunden, die Hintergrundfarbe der Statusleiste in der Bildauswahl festzulegen. Grundsätzlich müssen Sie das backgroundImage in der Navigationsleiste auf Null setzen, da in der Bildauswahl standardmäßig ein backgroundImage als weißes Bild vorhanden ist.
quelle