我需要定义,但如果我使用 iPad 或 iPhone,在这种情况下我需要不同的值。
所以,我认为它应该是这样的:
#ifdef UI_USER_INTERFACE_IDIOM == iPAD
#define ROWCOUNT 12
#else
#define ROWCOUNT 5
#endif
有什么解决办法吗?
我需要定义,但如果我使用 iPad 或 iPhone,在这种情况下我需要不同的值。
所以,我认为它应该是这样的:
#ifdef UI_USER_INTERFACE_IDIOM == iPAD
#define ROWCOUNT 12
#else
#define ROWCOUNT 5
#endif
有什么解决办法吗?
UI_USER_INTERFACE_IDIOM
是一个扩展为一些表达式的宏,它在运行时而不是在编译时检查硬件的类型。因此,您可能希望将您的定义更改ROWCOUNT
为变量而不是 const 或宏。
NSUInteger rowCount;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
rowCount = 12;
else
rowCount = 5;
或更简洁地说:
NSUInteger rowCount = (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) ? 12 : 5;
#ifdef
在这里并没有真正做你想做的事。
一个好的解决方案是:
#define ROWCOUNT ((UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) ? 5 : 12)
此方法正确识别 UI_USER_INTERFACE_IDIOM 的可用性:
#ifdef UI_USER_INTERFACE_IDIOM
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#else
#define IS_IPAD false
#endif
#define ROWCOUNT (IS_IPAD ? 12: 5)
您还可以使用 IS_IPAD 宏,如下所示:
NSUInteger rowCount;
if (IS_IPAD){
rowCount = 12;
}else{
rowCount = 5;
}