问题:
通话状态栏消失后,模态呈现的视图控制器不会向后移动,顶部留下 20px 的空白/透明空间。
正常:没有问题
通话中:没有问题
通话中消失后:
在顶部留下一个 20 像素高的空白/透明空间,显示下方的橙色视图。但是状态栏仍然存在于透明区域上。导航栏还为状态栏留出了空间,它的位置太低了 20 像素。
- 基于 iOS 10
- 模态呈现的视图控制器
- 自定义模态演示
- 后面的主视图控制器是橙色的
- 不使用自动布局
- 当旋转到Landscape时,20px In-Call Bar 离开并仍然留下 20px 间隙。
- 我选择不以横向显示状态栏。(即大多数股票应用程序)
我试着听 App Delegates:
willChangeStatusBarFrame
didChangeStatusBarFrame
还查看基于控制器的通知:
UIApplicationWillChangeStatusBarFrame
UIApplicationDidChangeStatusBarFrame
当我为上述所有四种方法记录呈现视图的框架时,该框架始终位于 (y: 0) 原点。
更新
视图控制器自定义模态演示
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)
})
}