预处理器-IF不起作用

时间:2011-08-11 13:57:06

标签: objective-c iphone ipad c-preprocessor

如果设备是iPad,我正在尝试使用Preprocessor-Ifs进行检查。如果它是iPad,我想定义一些特定于设备的东西,但出于某种原因,如果PP常数为真,我就无法检入PP-IF。

也许你有个主意?

#ifdef UI_USER_INTERFACE_IDIOM

    #define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)

#else

    #define IS_IPAD false

#endif



#if IS_IPAD

    #define WIDTH 768
    #define HEIGHT 1024

#else

    #define WIDTH 320
    #define HEIGHT 480

#endif

4 个答案:

答案 0 :(得分:11)

在构建应用程序之前处理预处理器规则(惊讶,惊讶)。由于它是一个通用的应用程序,它还不知道它是在iPad还是iPhone上运行。

使用此:

#ifdef UI_USER_INTERFACE_IDIOM
    #define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#else
    #define IS_IPAD false
#endif

#define WIDTH (IS_IPAD ? 768 : 320)
#define HEIGHT (IS_IPAD ? 1024 : 480)

答案 1 :(得分:2)

这是我的方法:你可以在头文件中使用它

#define _IPAD ((__IPHONE_OS_VERSION_MAX_ALLOWED >= 30200) && (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad))
#define GUI_TITLE_LABEL_WIDTH    (_IPAD? 220*2 : 220)
#define UI_FONT_SIZE             (_IPAD? 20 : 16)

简短易行:D

答案 2 :(得分:0)

您在#if语句中进行了运行时检查。预处理器检查不会评估(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)因此必须在运行时设置宽度和高度,因为直到运行时才能判断它是否是iPad。我还建议您使用0代替false

答案 3 :(得分:0)

(当您在SO上提出问题时,您应该告诉您尝试了什么,以及发生了什么。) 无论如何,我认为你将无法在那里做你想做的事,因为在编译时,编译器不知道你将运行什么设备。您可以编译代码,然后在iPad和iPhone,iPod上运行 - 预处理器怎么可能知道将来运行哪个设备?