Le code ci-dessous fonctionne sur iOS version 9.x ou inférieure. Pour une raison quelconque, cela ne fonctionne pas si iOS 10
if([MFMessageComposeViewController canSendText])
{
controller.body = message;
NSString *tel = pContact.tlc;
controller.recipients = pContact.tlc?@[tel]:nil;
controller.messageComposeDelegate = self;
controller.navigationBar.tintColor = [UIColor whiteColor];
controller.navigationBar.barTintColor = [UIColor blueColor];
[self presentViewController:controller animated:YES completion:nil];
}
est-ce cassé ou quelque chose a-t-il changé? Pas sûr de ce qui manque ici. Je suis dans le noir (noir)
EDIT: J'ai essayé d'utiliser du code de test sur un nouveau projet à vue unique vide et j'obtiens les mêmes problèmes.
@IBAction func SMS(_ sender: AnyObject) {
let composeVC = MFMessageComposeViewController()
composeVC.messageComposeDelegate = self
// Configure the fields of the interface.
composeVC.recipients = ["5555555555"]
composeVC.body = "Hello from California!"
composeVC.navigationBar.tintColor = UIColor.green
composeVC.navigationBar.barTintColor = UIColor.purple
// Present the view controller modally.
self.present(composeVC, animated: true, completion: nil)
}
Edit: L'apparence de UINavigationBar peut définir la couleur d'une application de test pour l'arrière-plan ou barTint, mais je ne parviens toujours pas à définir la couleur du texte pour l'application de test. L'application sur laquelle je travaille utilise déjà l'apparence de UINavigationBar pour définir la couleur de la barre de navigation dans l'application, mais cela n'affecte pas la barre de navigation pour le SMS car elle apparaît sur fond blanc et texte blanc. pas capable de changer la couleur du texte ou la couleur de fond rendre cette vue inutilisable.
Problème
Solution
UINavigationBar.appearance()
pour changer la couleur de la barre de navigation.backgroundColor
property & setBackgroundImage(_:for:)
pour corriger la couleur de la barre de navigation.Code
/// Method to set navigation bar color
func setNavigationBar() -> Void
{
// barTintColor will apply color for the app's navigation bar
UINavigationBar.appearance().barTintColor = UIColor.blue
// backgroundColor will apply color for some of the sharing container's app except for Messages app
UINavigationBar.appearance().backgroundColor = UIColor.blue
// backgroundImage will apply the color image for navigation bar for most of the sharing container's except for `Notes`
UINavigationBar.appearance().setBackgroundImage(UIImage(color: UIColor.blue), for:UIBarMetrics.default)
}
/// UIImage extension to create an image from specified color
extension UIImage
{
public convenience init?(color: UIColor, size: CGSize = CGSize(width: 1, height: 1)) {
let rect = CGRect(Origin: .zero, size: size)
UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0)
color.setFill()
UIRectFill(rect)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
guard let cgImage = image?.cgImage else { return nil }
self.init(cgImage: cgImage)
}
}
J'espère que ça aide!.
Avant iOS 10, j'utilisais le proxy d'apparence pour UINavigationBar
, à peu près comme ceci:
NSDictionary* titleAttribs = @{ NSForegroundColorAttributeName: [ColoursAndStyles sharedInstance].fontColourNavBarTitle,
NSFontAttributeName: [ColoursAndStyles sharedInstance].fontNavbarBoldTitle };
[[UINavigationBar appearance] setBarTintColor:[ColoursAndStyles sharedInstance].viewColourNavBarMain];
[[UINavigationBar appearance] setTintColor:[ColoursAndStyles sharedInstance].viewColourNavBarTint];
[[UINavigationBar appearance] setTitleTextAttributes:titleAttribs];
Ceci couvrait mon utilisation de MFMessageComposeViewController
, avec setTitleTextAttributes
en prenant soin de la couleur du texte du titre/légende.
Avec iOS 10, j'utilise les solutions suivantes. Juste avant de présenter la MFMessageComposeViewController
, je change les attributs de texte du titre. Par exemple.:
- (void)sendTap:(id)s
{
// some code...
NSDictionary* newTitleAttribs = @{ NSForegroundColorAttributeName: [ColoursAndStyles sharedInstance].fontColourTitleStrip,
NSFontAttributeName: [ColoursAndStyles sharedInstance].fontNavbarBoldTitle };
[[UINavigationBar appearance] setTitleTextAttributes:newTitleAttribs];
// present the MFMessageComposeViewController...
}
Et puis redéfinissez les paramètres sur la façon dont je les souhaite pour le reste de l'application, lorsque la MFMessageComposeViewController
se termine, par exemple:
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result
{
NSDictionary* titleAttribs = @{ NSForegroundColorAttributeName: [ColoursAndStyles sharedInstance].fontColourNavBarTitle,
NSFontAttributeName: [ColoursAndStyles sharedInstance].fontNavbarBoldTitle };
[[UINavigationBar appearance] setTitleTextAttributes:titleAttribs];
// some code...
[controller dismissViewControllerAnimated:YES completion:^{
// some code...
}];
}
Cela fonctionne au moins pour moi pour les titres et les boutons.
[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil].tintColor = [UIColor redColor];
[UINavigationBar appearance].titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor redColor]};
Cherchez plus d’informations ici: https://developer.Apple.com/reference/uikit/uiappearance
J'espère que cela t'aides. À votre santé
Solution Objective-C:
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageWithColor:[UIColor redColor]] forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setTranslucent:NO];
[[UINavigationBar appearance] setBarTintColor:[UIColor redColor]];
[[UINavigationBar appearance] setTintColor:[UIColor redColor]];
Image avec méthode de couleur:
+ (UIImage *)imageWithColor:(UIColor *)paramColor
{
CGRect frame = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
UIGraphicsBeginImageContextWithOptions(frame.size, NO, [UIScreen mainScreen].scale);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetInterpolationQuality(context, kCGInterpolationHigh);
CGContextSetFillColorWithColor(context, [paramColor CGColor]);
CGContextFillRect(context, frame);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}