#define基于平台[iPhone或iPad]

Ghi*_*ain 8 iphone objective-c universal-code ios c-preprocessor

我正在尝试让我的iPhone应用程序与iPad兼容.在头文件中,我设置了一些常量.由于屏幕较大,我希望用于图像的一些常量在iPad上比在iPhone上更大.我在互联网上找到了一些建议:

#if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define imgAmcWidth 656.0f
#define imgAmcHeight 36.0f
#else
#define imgAmcWidth    240.0f
#define imgAmcHeight   20.0f
#endif
Run Code Online (Sandbox Code Playgroud)

这似乎满足了我的需求.不幸的是,xcode 4无法编译这给出错误:'Token'["在预处理器中无效..'[LLVM GCC 4.2].我究竟做错了什么?

Ghi*_*ain 22

虽然可能不是最优雅的解决方案,但为了防止重大代码重写,我决定使用以下技巧:

#define iPad    UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad
#define imgAmcWidth         (iPad ? 639.0f : 240.0f)
// etc..
Run Code Online (Sandbox Code Playgroud)

  • 您应该在宏定义周围加上括号,否则可能会出现奇怪的优先级或操作数不匹配错误.括号使您的宏"安全"在更多上下文中使用. (2认同)

ser*_*gio 5

UI_USER_INTERFACE_IDIOMUIUserInterfaceIdiomPad不是预处理器的事情.它们是iOS的一部分,所以你应该这样做:

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    <define your constants here>
} else {
    <define your constants here>
}
Run Code Online (Sandbox Code Playgroud)

如果您计划支持3.2之前的iOS版本,请参阅此内容