获取statusBarFrame似乎没有在iOS 11中返回正确的值。我意识到将来可能有一种更好的方法来处理这个使用安全区域,但是现在我真的需要获取statusBarFrame像在iOS 11之前那样工作。以下是我通常如何获得它。
UIApplication.shared.statusBarFrame
我确认我的应用在iOS 11之前正常运行。但在iOS 11中,它似乎是向后的;例如,对于iPhone中的肖像,它应该是20并且在横向0中。但它在纵向中返回0,在横向中返回20。
我已阅读有关状态栏问题的所有帖子,但没有解决此问题。
我认为这似乎是一个时间问题。我在DispatchQueue.main.async {}闭包中包装了使用statusBarFrame的代码,它工作正常。我认为这更像是一个绑带。仍然希望有一个合适的解决方案。
建议表示赞赏。
谢谢!
答案 0 :(得分:0)
您可以在应用程序启动期间或视图控制器的viewDidLoad期间为状态栏设置背景颜色。这对我有用,方法如下。
extension UIApplication {
var statusBarView: UIView? {
return value(forKey: "statusBar") as? UIView
}
}
// Set upon application launch, if you've application based status bar
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
UIApplication.shared.statusBarView?.backgroundColor = UIColor.red
return true
}
}
or
// Set it from your view controller if you've view controller based statusbar
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
UIApplication.shared.statusBarView?.backgroundColor = UIColor.red
}
}
结果如下: