我将DropDown菜单添加到了我的视图控制器。当它出现时我把它放在我的超级视图前面。如果我打开热点iphone的状态栏将获得双倍高度我应该更改我的DropDown菜单的来源,所以我添加了通知以观察UIApplicationDidChangeStatusBarFrame
和UIApplicationWillChangeStatusBarFrame
。
如果我更改了屏幕的方向,它会给我正确的用户信息,如下所示:
***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.所以我不能依靠这个值来安排我的观点。这是一个错误还是我误解了什么?