我在viewDidLoad中有如下示例代码来检测热点开/关。它在iPhone 6-8中正常工作,但在iPhone X中崩溃了。
UIApplication *app = [UIApplication sharedApplication];
if(![[app valueForKey:@"statusBar"] valueForKey:@"doubleHeightLabel"])
{
//Some code here
}
else
{
//Some code here
}
显示的错误消息: -
因未捕获的异常'NSUnknownKeyException'而终止应用程序,原因:'[<UIStatusBar_Modern 0x7ffed341b7f0> valueForUndefinedKey:]:此类不是密钥doubleHeightLabel的密钥值编码兼容。
任何的想法?
有一种方法可以检查CNCopyCurrentNetowrkInfo当前的网络信息。
还有黑客:
OBJ-C:
CGFloat statusBarHeight = [[UIApplication sharedApplication] statusBarFrame].size.height;
迅速:
let statusBarHeight = UIApplication.shared.statusBarFrame.size.height
启用个人热点后,它将返回40,否则返回20。
请注意,它不适用于iPhone X +
它崩溃了,因为Apple改变了关键“statusBar”所持有的对象。它不再具有键“doubleHeightLabel”的对象。正如评论中所述,由于这个问题,Apple禁止使用私有API。当他们升级iOS版本时,他们会随意更改“statusBar”对象,因此可能会丢失或更改密钥,甚至可以保存完全不同的变量。
解决方案:不要使用私有API。做个好博爱,听听Apple。