2010-06-05 20 views
15

UIImagePickerController ändert den Statusleistenstil in schwarz/undurchsichtig. Ich möchte Status-Bar-Stil schwarz/durchscheinend halten. Ich finde einen Weg, um zu verhindern, dass sich die Statusleiste ändert. Oder es reibungslos durchlaufen. Wenn Sie jetzt UIImagePickerController präsentieren, ändert sich der Stil der Statusleiste sofort, sogar - [presentModalViewController: picker animated: YES] wird angegeben.Gibt es eine Möglichkeit zu verhindern, dass UIImagePickerController Statusleiste ändern?

Jede Methode, willkommen, einschließlich Hacking oder private Methode. Dies ist eine App für AppStore, aber ich möchte es sogar versuchen.

Antwort

0

Wenn Sie den Statusleistenstil vollständig deaktivieren möchten, können Sie eine UIApplication-Kategorie hinzufügen, die sie blockiert.

@implementation UIApplication (MyCategory) 
- (void)setStatusBarStyle:(UIStatusBarStyle)statusBarStyle {} 
@end 

Wenn das funktioniert, aber Sie wollen selektiv Änderungen deaktivieren, versuchen Subklassifizieren UIApplication so kann man super anrufen, wenn Sie die Änderung durchlaufen werden soll.

+0

Oh, es funktioniert nicht. Ich habe auch versucht, UIApplication zu erstellen, aber es hat auch nicht funktioniert. Vielleicht benutzt UIImagePickerController etwas Private-Methode. – Eonil

39

Ich wollte, dass die Statusleiste schwarz bleibt, während der Foto-Bibliothek-Picker angezeigt wird (der Foto-Picker ändert ihn in schwarz durchscheinend) und dies löste das Problem für mich.

die UIImagePickerDelegate Set:

libraryUI.delegate = self; 

den folgenden Callback-Implementierung:

- (void)navigationController:(UINavigationController *)navigationController 
     willShowViewController:(UIViewController *)viewController 
        animated:(BOOL)animated { 

    if ([navigationController isKindOfClass:[UIImagePickerController class]] && 
     ((UIImagePickerController *)navigationController).sourceType == UIImagePickerControllerSourceTypePhotoLibrary) { 
     [[UIApplication sharedApplication] setStatusBarHidden:NO]; 
     [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque animated:NO]; 
    } 
} 

Sie jede Art von Statusleiste Stil hier angeben. In Ihrem Fall müssten Sie wahrscheinlich die Überprüfung von sourceType entfernen und UIStatusBarStyleBlackTranslucent angeben.

+0

Dies ist die richtige Antwort, obwohl Sie einen leichten "Sprung" von schwarz durchscheinend zu der Farbe Ihrer Wahl sehen werden. – Peres

+0

Ist Ihnen bei der Verwendung von UIImagePickerControllerSourceTypePhotoLibrary das Problem aufgefallen, dass Sie ein Album geöffnet haben und dann ein wenig zurückgespult haben und die Geste abgebrochen haben? – Kukosk

0

Ich fand leichter Ansatz für mich. Just do

[[UIApplication sharedApplication] setStatusBarHidden:YES]; 
[self.delegate setNeedsStatusBarAppearanceUpdate]; 

und Statusleiste ist ausgeblendet (ändern Sie den Code, wenn Sie es sichtbar sein möchten). Muss nach dem Auswählen des Bildes von UIImagePickerController aufgerufen werden.

1

Versuchen Sie, diese perfekt auf ios arbeiten 8

-(void)navigationController:(UINavigationController *)navigationController 
     willShowViewController:(UIViewController *)viewController 
        animated:(BOOL)animated 
{ 
    [[[viewController navigationController] navigationBar] setBarStyle:UIBarStyleBlack]; 
} 
Verwandte Themen