Problema de la barra de estado de llamadas entrantes de UIViewController

Problema:

El controlador de vista presentado modalmente no retrocede una vez que desaparece la barra de estado durante la llamada, dejando un espacio vacío / transparente de 20 px en la parte superior.

Normal: sin problemas

En llamada: sin problemas

Después de que desaparezca la llamada:

Deja un espacio vacío / transparente de 20 px de alto en la parte superior que revela una vista naranja debajo. Sin embargo, la barra de estado todavía está presente sobre el área transparente. La barra de navegación también deja espacio para la barra de estado, solo tiene 20 píxeles de ubicación demasiado baja.

basado en iOS 10Controlador de vista presentado modalmentePresentación modal personalizadaEl controlador de vista principal detrás es naranjaNo usar AutolayoutCuando se gira aPaisaje, 20px In-Call Bar deja y aún deja 20px gap.Opto por no mostrar la barra de estado en orientaciones horizontales. (es decir, la mayoría de las aplicaciones de stock)

Traté de escuchar a los delegados de la aplicación:

willChangeStatusBarFrame
didChangeStatusBarFrame

Ver también las notificaciones basadas en el controlador:

UIApplicationWillChangeStatusBarFrame
UIApplicationDidChangeStatusBarFrame

Cuando registro el marco de la vista presentada para los cuatro métodos anteriores, el marco siempre está en el origen (y: 0).

Actualizar

Ver presentación modal personalizada del controlador

    let storyboard = UIStoryboard(name: "StoryBoard1", bundle: nil)
    self.modalVC = storyboard.instantiateViewController(withIdentifier: "My Modal View Controller") as? MyModalViewController
    self.modalVC!.transitioningDelegate = self
    self.modalVC.modalPresentationStyle = .custom
    self.modalVC.modalPresentationCapturesStatusBarAppearance = true;
    self.present(self.modalVC!, animated: true, completion: nil)


    func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
        let containerView = transitionContext.containerView
        let fromViewController = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.from)
        let toViewController = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.to)
        toViewController!.view.transform = CGAffineTransform(scaleX: 0.001, y: 0.001)

        UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 0.8, initialSpringVelocity: 0.0, options: [.curveEaseOut], animations: { () -> Void in

            toViewController!.view.transform = CGAffineTransform.identity

        }, completion: { (completed) -> Void in

           transitionContext.completeTransition(completed)

        })
 }

Respuestas a la pregunta(7)

Su respuesta a la pregunta