Es funktioniert, weil UIImagePickerController ist eine Unterklasse von UINavigationController und das delegate-Methode wird aufgerufen, jedes mal, wenn Sie eine weitere view controller an den navigation controller-stack.
setStatusBarStyle ist veraltet in iOS 9
Wie kann ich die Statusleiste ausblenden, wenn imagePicker zeigt? Es gibt einen bug, wo Bilder mit add y-offset mit der Größe des status-bar-da bar-ist nicht ausgeschnitten.
Dann können Sie die Farbe einstellen, die beim initialisieren:
let picker =UIImagePickerController(navigationBarStyle:.black)//black bar -> white text
Alternative (inspiriert durch folse ' s Antwort): Bei der Initialisierung der UIImagePickerController normalerweise, um diese Klasse die Stellvertretung (picker.delegate = self) und implementieren Sie diese Funktion:
func navigationController(_ navigationController:UINavigationController, didShow viewController:UIViewController, animated:Bool){if navigationController is UIImagePickerController{//check just to be safe
navigationController.navigationBar.barStyle =.black //black bar -> white text}}
Die erste Lösung (custom-Initialisierer) funktioniert bei mir nicht.
In Swift und iOS 9, setStatusBarStyle ist veraltet. Sie könnte eine Unterklasse der controller.
private final classLightStatusImagePickerController:UIImagePickerController{
override func preferredStatusBarStyle()->UIStatusBarStyle{return.lightContent
}}
Toller Vorschlag, und ich denke, das ist der richtige Weg, um vorwärts zu bewegen! Aber für einige Grund es didn ' T Arbeit für mich. Die Anrufe werden immer genannt, ich habe versucht, prefersStatusBarHidden, und rief sogar selbst.setNeedsStatusBarAppearanceUpdate in viewDidLoad. Status bar zeigt immer noch als darkContent.
Laut Apple-Dokumentation der UIImagePickerController sollten Sie nicht Unterklasse der controller. "Die UIImagePickerController-Klasse unterstützt den portrait-Modus nur. Diese Klasse verwendet werden soll, wie Sie ist und unterstützt nicht das erstellen von Unterklassen. Die view-Hierarchie für diese Klasse ist privat und muss nicht geändert werden, mit einer Ausnahme. Sie können zuweisen einer benutzerdefinierten Ansicht, die cameraOverlayView Eigenschaft und verwenden Sie diese Ansicht, um die Vorlage zusätzlicher Informationen oder die Verwaltung der Interaktionen zwischen den Kamera-interface und code."
-(void)navigationController:(UINavigationController*)navigationController willShowViewController:(UIViewController*)viewController animated:(BOOL)animated {/* Cancel button color */
_imagePicker.navigationBar.tintColor =<custom_color>/* Status bar color */[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];}
Ich Stand vor einem ähnlichen problem und ich fand die sauberste Weise, das zu lösen war, zu überschreiben preferredStatusBarStyle in eine Verlängerung der UIImagePickerController so gerne. Dieses Prinzip kann angewendet werden, um Bibliotheken von Drittanbietern schön.
extension UIImagePickerController{
open override var preferredStatusBarStyle:UIStatusBarStyle{if isLightTheme(){return.default//black text}return.lightContent //white text}}
isLightTheme() ist einfach eine Funktion, um zu bestimmen, ob die NavigationBar in diesem controller ist eine helle oder dunkle Farbe.
Nur drei Schritten:
1: Hinzufügen
UINavigationControllerDelegate
,UIImagePickerControllerDelegate
zu Ihrem2:
imagePickerController.delegate = self;
3:
UIImagePickerController
ist eine Unterklasse vonUINavigationController
und das delegate-Methode wird aufgerufen, jedes mal, wenn Sie eine weitere view controller an den navigation controller-stack.setStatusBarStyle
ist veraltet in iOS 9Swift-Lösung durch das schreiben einer Erweiterung für UIImagePickerController:
Dann können Sie die Farbe einstellen, die beim initialisieren:
Alternative (inspiriert durch folse ' s Antwort): Bei der Initialisierung der UIImagePickerController normalerweise, um diese Klasse die Stellvertretung (
picker.delegate = self
) und implementieren Sie diese Funktion:In Swift und iOS 9,
setStatusBarStyle
ist veraltet. Sie könnte eine Unterklasse der controller.Ich hatte das gleiche problem mit zu verwalten die Anwendung runned unter verschiedenen iOS-Versionen.
Den Delegierten:
Mit den Antworten die folgenden arbeitete für mich:
Implementieren
UINavigationControllerDelegate, UIImagePickerControllerDelegate
zu IhremUIViewController
und setzen
Fügen Sie die folgende Methode:
Ich Stand vor einem ähnlichen problem und ich fand die sauberste Weise, das zu lösen war, zu überschreiben
preferredStatusBarStyle
in eine Verlängerung derUIImagePickerController
so gerne. Dieses Prinzip kann angewendet werden, um Bibliotheken von Drittanbietern schön.isLightTheme()
ist einfach eine Funktion, um zu bestimmen, ob die NavigationBar in diesem controller ist eine helle oder dunkle Farbe.Dies ist die Schnellste Lösung, die ich denken konnte. Erstellen Sie die folgende Kategorie: