在iOS 11中,获取statusBarFrame似乎没有返回正确的值。我意识到将来可能会有更好的方法来处理这个问题,使用安全区域,但现在我真的需要让statusBarFrame像iOS 11之前那样工作。下面是我通常如何获取它。
UIApplication.shared.statusBarFrame我在iOS 11之前验证了我的应用程序工作正常,但在iOS 11中它似乎是反向的;例如,对于纵向的iPhone,它应该是20,而在横向的时候应该是0。但它在纵向返回0,在横向返回20。
我已经阅读了所有关于状态栏问题的帖子,但没有一篇涉及到这个问题。
我认为这似乎是一个时机问题。我将使用statusBarFrame的代码包装在DispatchQueue.main.async {}闭包中,它工作得很好。我会认为这更像是创可贴。仍然希望有一个合适的解决方案。
感谢您的建议。
谢谢!
发布于 2017-10-01 13:14:45
您可以在应用程序启动期间或在视图控制器的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
}
}结果如下:

https://stackoverflow.com/questions/46509347
复制相似问题