2017-10-01 58 views
0

获取statusBarFrame在iOS 11中看起来不会返回正确的值。我意识到在将来使用安全区域时可能会有更好的方式处理此问题,但现在我真的需要获取statusBarFrame的工作方式与iOS 11之前一样。以下是我通常如何获取它的方法。iOS 11中的StatusBarFrame

UIApplication.shared.statusBarFrame 

我确定我的应用程序在iOS 11之前正常工作。但是在iOS 11中它似乎倒退了;例如,对于肖像中的iPhone,它应该为20,并且在横向0中。但是,纵向返回0,横向返回20。

我读过所有关于状态栏问题的帖子,而没有解决这个问题。

我认为这似乎是一个时间问题。我在DispatchQueue.main.async {}中封装了使用statusBarFrame的代码,并且它工作正常。我会认为这更多是一个绷带。仍然希望有一个适当的解决方案。

建议感激。

谢谢!

回答

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 
    } 

} 



下面是结果:

enter image description here