ios7 - La barra de estado modal y los colores de texto de la barra de navegación de UIActivityViewControllers en iOS 7
uinavigationbar textcolor (6)
Como el UIActivityViewController presenta los controladores de vista del modelo subyacente, usamos esta solución para solucionar el problema del color de la barra de estado:
@interface StatusBarColorApplyingActivityViewController : UIActivityViewController
@end
@implementation StatusBarColorApplyingActivityViewController
- (void)presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion {
[super presentViewController:viewControllerToPresent animated:flag completion:^{
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
if (completion) {
completion();
}
}];
}
@end
Como puede ver, esta es solo una clase que extiende el UIActivityViewController anulando el presentViewController:animated:completion:
Cuando se presenta el controlador de vista, configuramos el estilo de la barra de estado a través de UIApplication en el bloque de finalización. Luego llamamos al bloque de finalización original dado al método, si lo hay.
Cuando estoy usando un UIActivityViewController
, después de que el usuario elija una actividad (como Correo o Mensaje), no puedo cambiar el color del texto de la barra de estado ni el color del texto / tinte de los botones Cancelar y Enviar de la barra de navegación. Para los botones de la barra, en el AppDelegate
he intentado usar:
[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
Y no pasa nada. Sin embargo, puedo configurar el título de la barra de navegación con esto:
[[UINavigationBar appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor], UITextAttributeTextColor, nil]];
Puse el UIViewControllerBasedStatusBarAppearance
en NO
en el Info.plist
. Y poner la línea:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
en AppDelegate
, y no hemos tenido la suerte de cambiar el color de la barra de estado. ¿Algunas ideas?
Creo que el código para cambiar el color de la barra de navegación es este:
[[UINavigationBar appearance] setBarTintColor:[UIColor whiteColor]];
Esto es para cambiar los colores de los botones de la barra de navegación en iOS 7, si lo necesita:
[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
Y este es el código si desea cambiar los colores de los botones en iOS 6:
[[UIBarButtonItem appearance] setTintColor:[UIColor redColor]];
Este código también es para iOS 8+ para cambiar el color del texto del botón de la barra para las actividades de UIActivityViewController (como compartir a través de Mensajes o Mail Composer).
En iOS 8, el UIActivityViewController presenta sus controladores de composición individuales en el controlador de vista de raíz de su aplicación.
Debe subclasificar su controlador de vista raíz (ya sea un UIViewController o UINavigationController) y agregar el siguiente código.
@interface UINavigationControllerBarColor : UINavigationController
@end
@implementation UINavigationControllerBarColor
- (void)presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion {
[super presentViewController:viewControllerToPresent animated:flag completion:^{
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
if (completion) {
completion();
}
}];
}
@end
y luego, en lugar de inicializar un UINavigationController en el AppDelegate o el guión gráfico, inicialice su controlador recién subclasificado.
Algunas otras recomendaciones subclasifican el UIActivityViewController pero esto no funciona.
Si desea cambiar el botón de la barra y los colores del título, use lo siguiente en su aplicación: didFinishLaunching:
[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
[[UINavigationBar appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
[UIColor whiteColor], UITextAttributeTextColor,
[UIFont systemFontOfSize:18.0f], UITextAttributeFont,
nil]];
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setTintColor:[UIColor whiteColor]];
En lugar de UIActivityViewController
de UIActivityViewController
, podemos cambiar el tintColor de la barra de navegación al presentarlo y revertirlo una vez completado en el completionHandler
. Por ejemplo:
UIColor *normalColor = [[UINavigationBar appearance] tintColor];
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:dataToShare applicationActivities:nil];
[activityViewController setCompletionHandler:^(NSString *activityType, BOOL completed) {
// back to normal color
[[UINavigationBar appearance] setTintColor:normalColor];
}];
[self presentViewController:activityViewController animated:YES completion:^{
// change color to suit your need
[[UINavigationBar appearance] setTintColor:[UIColor colorWithRed:25.0f/255.0f green:125.0f/255.0f blue:255.0f/255.0f alpha:1.0f]]; // ActionSheet options'' Blue color
}];
Encontré una solución para cambiar el color del texto de los botones Enviar y Cancelar .
Revisa mi respuesta desde here .
Respecto a cambiar el estilo de la barra de estado de negro a blanco, he intentado casi todo lo que está en y nada funcionó. Parece que no hay solución al respecto.
Una cosa que podría funcionar, pero realmente no sé cómo usarla, podría ser cambiar el estilo de la barra de estado en el controlador de vista secundaria. Hay un post de al respecto here .
Esto podría funcionar solo si se asume que MFMailComposerViewController
y MFMessageComposeViewController
son controladores de vista secundarios de UIActivityViewController
y, por lo tanto, si especificamos el estilo de barra de estado para UIActivityViewController
entonces los controladores de vista secundarios deben tener el mismo estilo de barra de estado que el principal.
Hay un método en el UIViewController
llamado childViewControllerForStatusBarStyle
. Here está la documentación de Apple para ello.
Pero realmente no sé cómo usar eso. ¿Alguien resolvió esto?
Tienes que configurar el tintColor de toda la aplicación.
self.window.tintColor = [UIColor redColor];
o
self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
botones de barra
self.navigationController.navigationBar.tintColor = [UIColor redColor];