El control de visualización de actualización de la barra de estado de iOS en la aplicación se presentó de forma modal en la pantalla

Me da el lujo de hacer esta pregunta porque después de grandes investigaciones casi 2 días de Google, Stack Overflowing, etc …

Mi problema es el siguiente: estoy presentando ViewController desde mi ViewController principal así:

UINavigationController *navigation = [[UINavigationController alloc] initWithRootViewController:VController]; navigation.transitioningDelegate = self; navigation.modalPresentationStyle = UIModalPresentationCustom; [self presentViewController:navigation animated:YES completion:nil]; 

cada vez que un usuario de iPhone está en llamada o está usando su teléfono como un punto de acceso, la barra de estado se amplía presionando mi modaly presenta VC en la parte inferior pero el origen está configurado en (0; 0) El problema es cuando el usuario termina la llamada durante él está en el tamaño de mi barra de estado de la aplicación al tamaño normal, pero Modal VC no se movió hacia arriba.

introduzca la descripción de la imagen aquí

Lo supe cuando sucedió en el código gracias a esta notificación:

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statuBarChange:) name:UIApplicationDidChangeStatusBarFrameNotification object:nil]; 

Lo peor es que los cuadros son correctos y el origen sigue siendo (0,0)

¿Hay alguna manera de actualizar modal presentado vc? sin disimular y presentarlo nuevamente?

    ¿Realmente necesita una transición personalizada para este modal? Si no es así, elimine la línea "navigation.modalPresentationStyle = UIModalPresentationCustom" y estará listo.

    Si necesita un estilo personalizado, este es un error conocido con el estilo UIModalPresentationCustom en iOS 8+ y la barra de estado. AFAIK, tendrás que piratear esto con AnimateTransition y meter los frameworks en los lugares adecuados.

    También hay un horrible truco para esto usando willChangeStatusBarFrame en el delegado de la aplicación a continuación. Puede mejorar con la detección de si existe un modo modal y animar el cambio.

     - (void)application:(UIApplication *)application willChangeStatusBarFrame:(CGRect)newStatusBarFrame { if (newStatusBarFrame.size.height < 40) { for (UIView *view in self.window.subviews) { view.frame = self.window.bounds; } } } 

    Otra alternativa es hacer que el modal cubra la barra de estado y anular prefersStatusBarHidden para ese controller de vista.

    Odio todas estas soluciones, pero debería darle algo viable dependiendo de cómo esté configurado su proyecto, y si no puede ignorar ese pequeño espacio para un dialog modal temporal.