5

我需要定义,但如果我使用 iPad 或 iPhone,在这种情况下我需要不同的值。

所以,我认为它应该是这样的:

#ifdef UI_USER_INTERFACE_IDIOM == iPAD
#define ROWCOUNT 12
#else
#define ROWCOUNT 5
#endif

有什么解决办法吗?

4

3 回答 3

8

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;
于 2013-08-06T20:32:14.833 回答
7

#ifdef在这里并没有真正做你想做的事。

一个好的解决方案是:

#define ROWCOUNT ((UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) ? 5 : 12)
于 2013-08-06T20:34:41.317 回答
5

此方法正确识别 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;
}
于 2013-08-06T20:36:41.963 回答