使用已定义的宏进行iOS预处理会导致“令牌无效”

时间:2015-08-10 10:12:59

标签: c++ ios objective-c c-preprocessor

我有一个类,其中的维度是针对我的应用中使用的所有UI元素的consts编写的。突然我注意到6和4 iphone上的东西看起来不一样,所以我需要稍微调整数字。但是当我想使用条件来检测设备并为常量分配正确的值时,它给了我“令牌不是预处理器子表达式中的有效二元运算符”。 代码如下:

#import <UIKit/UIKit.h>
#import "UIStyles.h"

#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define IS_RETINA ([[UIScreen mainScreen] scale] >= 2.0)

#define SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width)
#define SCREEN_HEIGHT ([[UIScreen mainScreen] bounds].size.height)
#define SCREEN_MAX_LENGTH (MAX(SCREEN_WIDTH, SCREEN_HEIGHT))
#define SCREEN_MIN_LENGTH (MIN(SCREEN_WIDTH, SCREEN_HEIGHT))

#define IS_IPHONE_4_OR_LESS (IS_IPHONE && SCREEN_MAX_LENGTH < 568.0)
#define IS_IPHONE_5 (IS_IPHONE && SCREEN_MAX_LENGTH == 568.0)
#define IS_IPHONE_6 (IS_IPHONE && SCREEN_MAX_LENGTH == 667.0)
#define IS_IPHONE_6P (IS_IPHONE && SCREEN_MAX_LENGTH == 736.0)

@implementation UIStyles

#if (IS_IPHONE_4_OR_LESS)
    const int BOTTOM_BTN_HEIGHT = 40;
    const int PRICE_AND_LOCATION_BAR_HEIGHT = 40;
#else
    const int BOTTOM_BTN_HEIGHT = 50;
    const int PRICE_AND_LOCATION_BAR_HEIGHT = 50;
#endif

@end

2 个答案:

答案 0 :(得分:2)

尝试以下方式...

#if defined(IS_IPHONE_6)
const int BOTTOM_BTN_HEIGHT = 40;
const int PRICE_AND_LOCATION_BAR_HEIGHT = 40;
#else
const int BOTTOM_BTN_HEIGHT = 50;
const int PRICE_AND_LOCATION_BAR_HEIGHT = 50;
#endif

你可以尝试这样:

 NSLog(@"Botton Height : %d",IS_IPHONE_6);

答案 1 :(得分:0)

我想你应该创建一个单独使用这个设备的功能。似乎你的编译器在预处理时无法调用[[UIScreen mainScreen]边界] .size.width。我认为这并不是要取代......