gpt4 book ai didi

ios - UIViewController 通话中状态栏问题

转载 作者:IT王子 更新时间:2023-10-29 05:15:49 24 4
gpt4 key购买 nike

问题:

在通话状态栏消失后,模态呈现的 View Controller 不会向上移动,在顶部留下 20px 的空白/透明空间。


正常:没有问题

enter image description here


通话中:没有问题

enter image description here


通话中消失后:

在顶部留下一个 20 像素高的空白/透明空间,显示下面的橙色 View 。但是状态栏仍然存在于透明区域。导航栏也为状态栏留出了空间,只是位置太低了 20px。

enter image description here

enter image description here


  • 基于 iOS 10
  • 模态呈现的 View Controller
  • 自定义模态呈现
  • Main View Controller 后面是橙色
  • 不使用自动布局
  • 当旋转到Landscape时,20px In-Call Bar 离开并仍然留下 20px 的间隙。
  • 我选择不在横向显示状态栏。 (即大多数股票应用)

我试过听 App Delegates:

willChangeStatusBarFrame
didChangeStatusBarFrame

同时查看基于 Controller 的通知:

UIApplicationWillChangeStatusBarFrame
UIApplicationDidChangeStatusBarFrame

当我为上述所有四种方法记录呈现 View 的框架时,框架始终位于 (y: 0) 原点。


更新

View Controller 自定义模态呈现

    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)

})
}

最佳答案

我已经寻找解决方案 3 天了。我不喜欢这个解决方案,但没有找到更好的解决方法。

当 rootViewController View 的高度比窗口高 20 点时,我遇到了这种情况,当我收到有关状态栏高度更新的通知时,我手动设置了正确的值。

将方法添加到 AppDelegate.swift

func application(_ application: UIApplication, didChangeStatusBarFrame oldStatusBarFrame: CGRect) {
if let window = application.keyWindow {
window.rootViewController?.view.frame = window.frame
}
}

之后它按预期工作(即使在方向改变之后)。希望它能对某人有所帮助,因为我在这上面花了太多时间。

附言它闪烁了一点,但有效。

关于ios - UIViewController 通话中状态栏问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43595514/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com