iOS 11中的StatusBarFrame

时间:2017-10-01 04:54:18

标签: ios swift statusbar ios11

获取statusBarFrame似乎没有在iOS 11中返回正确的值。我意识到将来可能有一种更好的方法来处理这个使用安全区域,但是现在我真的需要获取statusBarFrame像在iOS 11之前那样工作。以下是我通常如何获得它。

UIApplication.shared.statusBarFrame

我确认我的应用在iOS 11之前正常运行。但在iOS 11中,它似乎是向后的;例如,对于iPhone中的肖像,它应该是20并且在横向0中。但它在纵向中返回0,在横向中返回20。

我已阅读有关状态栏问题的所有帖子,但没有解决此问题。

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

建议表示赞赏。

谢谢!

1 个答案:

答案 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
    }

}



结果如下:

enter image description here