如何像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 高。我如何在我的应用程序中执行此操作?
这真是一个有趣的问题,有时让我弄明白了。
如果您注意到 viewcontroller 中的应用商店没有状态栏,这意味着根本不应显示绿色栏。这是第一个提示。
您可以通过UIApplication.shared.value(forKey: "statusBarWindow") as! UIWindow
访问状态栏
根据第一点,这意味着状态栏没有隐藏,但实际上它 statusBarWindow.frame.origin.y
只是向上移动了。
请不要单独处理 iPhone x
请确保状态栏未隐藏
请注意,这不是唯一正确的方法,现在您拥有视图本身,您可以更改原点或大小,甚至尝试获取视图内部的内容并隐藏它们或更改它们帧太等等
这里有一个例子,你可以怎么做。
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
}
}
还附上了带有此代码结果的图片,希望这个答案对您也有用。
在 iOS App Store 中进行 phone 通话时,状态栏在阅读文章时从 40pt 高变为 20pt 高。我如何在我的应用程序中执行此操作?
这真是一个有趣的问题,有时让我弄明白了。
如果您注意到 viewcontroller 中的应用商店没有状态栏,这意味着根本不应显示绿色栏。这是第一个提示。
您可以通过
UIApplication.shared.value(forKey: "statusBarWindow") as! UIWindow
访问状态栏
根据第一点,这意味着状态栏没有隐藏,但实际上它
statusBarWindow.frame.origin.y
只是向上移动了。请不要单独处理 iPhone x
请确保状态栏未隐藏
请注意,这不是唯一正确的方法,现在您拥有视图本身,您可以更改原点或大小,甚至尝试获取视图内部的内容并隐藏它们或更改它们帧太等等
这里有一个例子,你可以怎么做。
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
}
}
还附上了带有此代码结果的图片,希望这个答案对您也有用。