为什么UIApplicationDidChangeStatusBarFrame的用户信息在iphone热点打开时不正确?

时间:2016-09-23 10:45:37

标签: ios sdk notifications uikit

我将DropDown菜单添加到了我的视图控制器。当它出现时我把它放在我的超级视图前面。如果我打开热点iphone的状态栏将获得双倍高度我应该更改我的DropDown菜单的来源,所以我添加了通知以观察UIApplicationDidChangeStatusBarFrameUIApplicationWillChangeStatusBarFrame

如果我更改了屏幕的方向,它会给我正确的用户信息,如下所示:

***WILL CHANGE STATUS BAR***
StatusBar size: (0.0, 0.0, 736.0, 20.0)
***WILL CHANGE STATUS BAR***
StatusBar size: (0.0, 0.0, 736.0, 20.0)
***DID CHANGE STATUS BAR***
StatusBar size: (0.0, 0.0, 414.0, 20.0)
REAL Statusbar height: 20.0
***DID CHANGE STATUS BAR***
StatusBar size: (0.0, 0.0, 0.0, 0.0)
REAL Statusbar height: 0.0

使用的功能:

  func didChangeStatusBar(_ notification: Notification) {
    print("***DID CHANGE STATUS BAR***")
    let infoDict = notification.userInfo as! [String: Any]
    let statusBarSize = (infoDict[UIApplicationStatusBarFrameUserInfoKey] as! NSValue).cgRectValue
    print("StatusBar size: \(statusBarSize)")
    print("REAL Statusbar height: \(UIApplication.shared.statusBarFrame.height)")

    let realHeight = UIApplication.shared.statusBarFrame.height
}

  func willChangeStatusBar(_ notification: Notification) {
    print("***WILL CHANGE STATUS BAR***")
    let infoDict = notification.userInfo as! [String: Any]
    let statusBarSize = (infoDict[UIApplicationStatusBarFrameUserInfoKey] as! NSValue).cgRectValue
    print("StatusBar size: \(statusBarSize)")
  }

此外,我不知道为什么它被召唤两次。 现在我打开我的iphone上的热点并使用另一个连接,状态栏的高度将加倍。输出是:

***WILL CHANGE STATUS BAR***
StatusBar size: (0.0, 0.0, 414.0, 40.0)
***DID CHANGE STATUS BAR***
StatusBar size: (0.0, 0.0, 414.0, 20.0)
REAL Statusbar height: 40.0

你看到了吗,那个用户信息给了我们状态栏高度等于20的值,但实际高度是40.所以我不能依靠这个值来安排我的观点。这是一个错误还是我误解了什么?

0 个答案:

没有答案