2017-10-01 91 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