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).
ActualizarVer 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)
})
}