我们将SDK更新到iOS 8.3,突然之间,我们的iPad检测方法无法正常工作:
+ (BOOL) isiPad
{
#ifdef UI_USER_INTERFACE_IDIOM
return UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad;
#endif
return NO;
}
永远不会输入ifdef
块,因此始终会运行return NO;
。 如何在不使用UI_USER_INTERFACE_IDIOM()
的情况下检测设备是否为iPad?
我正在使用:
答案 0 :(得分:12)
8.2
UserInterfaceIdiom()
是
#define UI_USER_INTERFACE_IDIOM() ([[UIDevice currentDevice] respondsToSelector:@selector(userInterfaceIdiom)] ? [[UIDevice currentDevice] userInterfaceIdiom] : UIUserInterfaceIdiomPhone)
8.3
UserInterfaceIdiom()
是
static inline UIUserInterfaceIdiom UI_USER_INTERFACE_IDIOM() {
return ([[UIDevice currentDevice] respondsToSelector:@selector(userInterfaceIdiom)] ?
[[UIDevice currentDevice] userInterfaceIdiom] :
UIUserInterfaceIdiomPhone);
}
因此#ifdef UI_USER_INTERFACE_IDIOM
8.3
始终为false
请注意标题是
提供UI_USER_INTERFACE_IDIOM()函数时使用 部署到小于3.2的iOS版本。如果最早的 您要部署的iPhone / iOS版本是3.2或 更大,您可以直接使用 - [UIDevice userInterfaceIdiom]。
所以建议你重构
+ (BOOL) isiPad
{
static BOOL isIPad = NO;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
isIPad = [[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad;
});
return isIPad;
}