La vista de alerta muestra un rectángulo blanco en iOS7

El siguiente código funciona perfectamente desde iOS 5 a 6.1. Incluso tengo aplicaciones en la tienda con ese código:

-(void)showActivityIndicator { if(!mLoadingView) // { mLoadingView = [[UIAlertView alloc] initWithTitle:@"" message:@"" delegate:self cancelButtonTitle:nil otherButtonTitles:nil]; mLoadingView.tag = kAlertViewTag; } [mLoadingView show]; } - (void)willPresentAlertView:(UIAlertView *)alertView { if (alertView.tag == kAlertViewTag) { UIActivityIndicatorView *actInd = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; actInd.frame = CGRectMake(128.0f, 45.0f, 25.0f, 25.0f); [alertView addSubview:actInd]; [actInd startAnimating]; UILabel *l = [[UILabel alloc]init]; l.text = NSLocalizedString(@"PRODUCT_PURCHASE_INDICATOR_TITLE", @"Please wait..."); l.font = [UIFont fontWithName:@"Helvetica" size:16]; float strWidth = [l.text sizeWithFont:l.font].width; float frameWidth = alertView.frame.size.width; l.frame = CGRectMake((frameWidth - strWidth)/2, -25, 210, 100); l.textColor = [UIColor whiteColor]; l.shadowColor = [UIColor blackColor]; l.shadowOffset = CGSizeMake(1.0, 1.0); l.backgroundColor = [UIColor clearColor]; [alertView addSubview:l]; } } 

Mostrará vista de alerta sin botones y con indicador de actividad y etiqueta. Sin embargo, en iOS7 solo puedo ver el rectángulo blanco redondeado, sin indicador de actividad.

¿Qué puedo hacer para tener este trabajo desde iOS 5 a 7?

Actualizar:

Para ser más descriptivo, agrego capturas de pantalla. La siguiente es una captura de pantalla de iOS 5 a 6.1. Funciona bien allí.

enter image description here

El siguiente es iOS7. Como puede ver, incluso el tamaño es más pequeño. Parece que no está completamente inicializado o algo así.

enter image description here


ahora addSubview no está disponible en UIAlertView en iOS7

La clase UIAlertView está pensada para ser utilizada tal como está y no es compatible con la UIAlertView subclases. La jerarquía de vista para esta clase es privada y no debe modificarse

Como alternativa puede usar SVProgressHUD .

Desde iOS 7 en adelante, puedes hacer:

  [alertView setValue:customContentView forKey:@"accessoryView"]; 

para obtener contenido personalizado en una vista de alerta estándar.

Tuve que solucionar este problema muy rápido, por lo tanto, he construido un UIView UIAlertView estilo iOS7 con sus animaciones, que se puede ampliar con cualquier contenido personalizado.

Puede haber otros que puedan usar mi solución, así que hice todo el código disponible en Github .

enter image description here

Además, si desea seguir utilizando el UIAlertView en versiones anteriores del sistema operativo, debe bifurcar el código. Puede ser tan malo como suena, estoy usando lo siguiente:

 float sysVer = [[[UIDevice currentDevice] systemVersion] floatValue]; if (sysVer < 7) { // your old solution } else { .. // iOS7 dialog code } 

(Tenga en cuenta que esto de ninguna manera es una solución real: si Apple no quiere que usemos los cuadros de diálogo para todo tipo de cosas, entonces probablemente no deberíamos).