11

Sto provando a cambiare il colore dei pulsanti della barra di navigazione, del colore della barra di navigazione e del colore del testo, tuttavia non sembra che vada da nessuna parte. Il MFMailComposeViewController viene attivato tramite un UIActivityViewController e ho provato alcuni metodi diversi che hanno funzionato prima (non attraverso un UIActivityViewController).Cambia i colori della barra di stato in MFMailComposeViewController tramite UIActivityViewController

Questo è il mio codice corrente:

UINavigationBar.my_appearanceWhenContainedIn(MFMailComposeViewController).barTintColor = UIColor.blackColor() 

Questo è stato suggerito here. Ho anche provato questo:

activityVC.navigationController?.navigationBar.tintColor = UIColorFromRGB(0x0096FF) 
    activityVC.navigationController?.navigationBar.barTintColor = UIColor.whiteColor() 

Sto anche cercando di cambiare il colore della barra di stato.

Qualcuno ha qualche idea?

UPDATE:

ho risolto i problemi barra di navigazione per i pulsanti e il titolo, ma ancora alla ricerca di una soluzione per la barra di stato. Facendo questo non funziona:

self.presentViewController(activityVC, animated: true, completion: {() in 
     UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true) 
    }) 

risposta

0

Vai al file delegato app e aggiungere queste righe al tuo didFinishLaunchingWithOptions :) Si aggiornerà il colore della barra di stato per tutti i controller di vista.

UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent 

Inoltre nel file Info.plist aggiungere una nuova chiave denominata "View controller-based barra di stato l'aspetto" e impostare il valore a "NO"

UPDATE

Per impostare differente stili tra viste provare questo:

override func preferredStatusBarStyle() -> UIStatusBarStyle { 
return UIStatusBarStyle.LightContent 
} 

allora si può tornare chiaro o scuro a seconda di ciò che si sta cercando di ottenere :)

+0

Ho questo, ma ho bisogno che lo stile della barra di stato sia diverso tra i controller di visualizzazione. – user3746428

-1

MFMailComposeViewController imposta il proprio stile Barra di stato, a cui non si ha accesso. Probabilmente puoi scavare in alcune API private per farlo, ma la tua app sarà sicuramente respinta da Apple.

Come nota a margine, tuttavia, non è necessario modificare nulla su UIViewController (s) fornito da Apple. Sembrano così perché sono stilizzati dopo l'app originale. Ha lo scopo di dare agli utenti un senso di posizione e direzione in un'app. Apple potrebbe rifiutare la tua app, perché hai cambiato le loro cose.

+0

Mentre potrebbe essere il caso, ho avuto molte altre app approvate che fanno esattamente la stessa cosa, quindi non sono troppo preoccupato che venga rifiutato. – user3746428

1

per iOS 8 si utilizza barTintColor per cambiare il colore dello stato

NSString *invitationText = @"test"; 
    [UINavigationBar appearance].barTintColor = [UIColor whiteColor]; 
    MFMailComposeViewController *mc = [[MFMailComposeViewController alloc] init]; 
    mc.mailComposeDelegate = self; 
    [mc setSubject:@"Test "]; 
    [mc setMessageBody:invitationText isHTML:YES]; 
    [self presentViewController:mc animated:YES completion:NULL]; 
4

È possibile sottoclasse il MFMailViewController e sovrascrivere la sua viewWillAppear metodo

override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(animated) 
    UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent 
    self.navigationController.navigationBar.translucent = false 
    self.navigationController.navigationBar.opaque = false 
    self.navigationController.navigationBar.barTintColor = UIColor.blueColor() 
} 

Dal desideri solo la barra di stato di essere lightcontent quando il MFMailComposeViewController è attivo, non si dovrebbe mettere il

UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent 

nei delegati della tua app ha fatto FinishLoading. Questo lo imporrebbe in lightContent per l'intera applicazione.

+0

puoi contrassegnarlo come risposta corretta se ha risolto il tuo problema, per favore? – MarkHim