solid color change bar colors uinavigationbar mfmessagecomposeview

colors - change - iOS 10 ya no puede establecer barcolor y tinte en MFMessageComposeViewController



navigation bar title color swift 3 (4)

Antes de iOS 10, estaba usando el proxy de apariencia para UINavigationBar , algo como esto:

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];

Esto cubrió mi uso de MFMessageComposeViewController , con setTitleTextAttributes cuidando el color del texto del título / título.

Con iOS 10, estoy usando el siguiente trabajo alrededor. Justo antes de presentar el MFMessageComposeViewController , cambio los atributos del texto del título . P.ej:

- (void)sendTap:(id)s { // some code... NSDictionary* newTitleAttribs = @{ NSForegroundColorAttributeName: [ColoursAndStyles sharedInstance].fontColourTitleStrip, NSFontAttributeName: [ColoursAndStyles sharedInstance].fontNavbarBoldTitle }; [[UINavigationBar appearance] setTitleTextAttributes:newTitleAttribs]; // present the MFMessageComposeViewController... }

Y luego vuelva a configurar las cosas como las quiero para el resto de la aplicación, cuando el MFMessageComposeViewController termine, por ejemplo:

- (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... }]; }

El siguiente código funciona en la versión 9.x de iOS o menos, por alguna razón, esto no funciona 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á roto o algo cambió? No estoy seguro de lo que falta aquí. Estoy en la oscuridad (tono negro)

EDITAR: Intenté usar un código de prueba en un nuevo proyecto de vista única vacío y tengo los mismos problemas.

@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) }

Edición: la apariencia de UINavigationBar puede establecer el color en una aplicación de prueba para el fondo o la barra de texto, pero todavía no puedo establecer el color del texto para la aplicación de prueba. La aplicación en la que estoy trabajando ya usa la apariencia de la barra de navegación de UIN para establecer el color de la barra de navegación en toda la aplicación, pero esto no afecta a la barra de navegación para el SMS, ya que aparece en fondo blanco y texto en blanco. si no puede cambiar el color del texto o el color de fondo, esta vista no se puede utilizar.


Esto funciona para mí, al menos para los elementos de título y botón.

[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil].tintColor = [UIColor redColor]; [UINavigationBar appearance].titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor redColor]};

Busque más información aquí: https://developer.apple.com/reference/uikit/uiappearance

Espero que esto ayude. Aclamaciones


Solución 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]];

Imagen con método de color:

+ (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; }


Problema

  • Por algunas razones, en iOS10.x barTintColor no funciona en algunos de los contenedores para compartir.
  • Pero hay una solución para corregir el color de la barra de navegación en todos los contenedores compartidos.

Solución

  • Use UINavigationBar.appearance() para cambiar el color de la barra de navegación.
  • Use backgroundColor propiedad backgroundColor y el setBackgroundImage(_:for:) para corregir el color de la barra de navegación.

Código

/// 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) } }

¡Espero eso ayude!.