2017-08-21 4 views
3

J'ai un problème pour changer la couleur de fond de la barre de navigation sur MFMessageComposeViewController.Définir la couleur du fond de NavigationBar sur MFMessageComposeViewController

J'ai essayé ce code:

UINavigationBar.appearance().barTintColor = Configuration.Colors.navigationBarBackgroundColor 
UINavigationBar.appearance().backgroundColor = UIColor.green 
UINavigationBar.appearance().titleTextAttributes = [NSFontAttributeName: UIFont(name: "Roboto-Regular", size: 18)!, NSForegroundColorAttributeName: UIColor.white] as [String: AnyObject] 

let composer = MFMessageComposeViewController() 

self?.present(composer, animated: true) { 
    UIApplication.shared.statusBarStyle = .lightContent 
} 

Et cela ne fonctionne pas. La chose la plus étrange est que cela fonctionne quand je fais la même chose pour MFMailComposeViewController. J'ai aussi essayé de changer de couleur directement sur un compositeur comme celui-ci.

composer.navigationBar.tintColor = Configuration.Colors.navigationBarBackgroundColor 

Je ne trouve pas de solution sur stackoverflow.

+1

S'il vous plaît vérifier ce lien [Lien pour définir la navigation sur le composeur de courrier] (https://stackoverflow.com/questions/39453933/ios-10-can-no-longer-set-barcolor-and-tint- on-mfmessagecomposeviewcontroller) – cole

+0

Modifier dans info.plist la ligne Afficher l'apparence de la barre d'état basée sur le contrôleur et la définir sur NO –

+0

La propriété permettant de définir la couleur d'arrière-plan est 'composer.navigationBar.barTintColor'. Essayez-la, elle fonctionnera. –

Répondre

0

Il semble que j'ai trouvé une solution de contournement. D'une certaine manière, le réglage composer.navigationBar.barTintColor et UINavigationBar.appearance().barTintColor ne fonctionnent pas.

La solution consiste à utiliser UINavigationBar.appearance().setBackgroundImage(...) et définir UIImage avec une couleur comme arrière-plan

Code de travail complet:

UINavigationBar.appearance().setBackgroundImage(UIImage.from(color: UIColor.green), for: .default) 
let composer = MFMessageComposeViewController()  
self?.present(composer, animated: true, completion: nil) 

pour créer UIImage avec une couleur:

extension UIImage { 
    static func from(color: UIColor) -> UIImage { 
     let rect = CGRect(x: 0, y: 0, width: 1, height: 1) 
     UIGraphicsBeginImageContext(rect.size) 
     let context = UIGraphicsGetCurrentContext() 
     context!.setFillColor(color.cgColor) 
     context!.fill(rect) 
     let img = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 
     return img! 
    } 
}