如何像App Store一样设置通话时状态栏高度为20pt?

How to set the status bar height to 20pt when on a call like the App Store does?

在 iOS App Store 中进行 phone 通话时,状态栏在阅读文章时从 40pt 高变为 20pt 高。我如何在我的应用程序中执行此操作?

这真是一个有趣的问题,有时让我弄明白了。

  1. 如果您注意到 viewcontroller 中的应用商店没有状态栏,这意味着根本不应显示绿色栏。这是第一个提示。

  2. 您可以通过UIApplication.shared.value(forKey: "statusBarWindow") as! UIWindow

  3. 访问状态栏
  4. 根据第一点,这意味着状态栏没有隐藏,但实际上它 statusBarWindow.frame.origin.y 只是向上移动了。

  5. 请不要单独处理 iPhone x

  6. 请确保状态栏未隐藏

  7. 请注意,这不是唯一正确的方法,现在您拥有视图本身,您可以更改原点或大小,甚至尝试获取视图内部的内容并隐藏它们或更改它们帧太等等

这里有一个例子,你可以怎么做。

class ViewController: UIViewController {

var isHidden:Bool = false

override func viewDidLoad() {
    super.viewDidLoad()
}

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    UIView.animate(withDuration: 0.5) { () -> Void in
        let statusBarWindow = UIApplication.shared.value(forKey: "statusBarWindow") as! UIWindow
        statusBarWindow.frame = CGRect(x: 0, y: -20, width: statusBarWindow.frame.size.width, height: 40.0)
    }
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

override var prefersStatusBarHidden: Bool{
    return isHidden
}

}

还附上了带有此代码结果的图片,希望这个答案对您也有用。