我想根据不同的设备高度动态定义一个常数。
我尝试使用此代码,但是它不起作用:
#define isPhone568 ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone && [UIScreen mainScreen].bounds.size.height == 568)
#ifdef isPhone568
#define kColumnHeightPortrait568 548
#else
#define kColumnHeightPortrait568 (IS_IPAD ? 984 : 460)
#endif
即使我使用的是3.5英寸模拟器,我也会得到548。这是什么问题?
最佳答案
您不能在宏定义中运行代码,这是在编译时发生的简单文本替换过程。因此,您不知道此时的设备特征是什么,因为您不在目标设备上。
如果要使用类似[UIDevice currentDevice] userInterfaceIdiom
的东西,则必须在运行时而不是在编译时宏中对其进行评估,例如:
int kColumnHeightPortrait568 = 548;
if (([[UIDevice currentDevice] userInterfaceIdiom] != UIUserInterfaceIdiomPhone)
|| ([UIScreen mainScreen].bounds.size.height != 568))
{
kColumnHeightPortrait568 = (IS_IPAD ? 984 : 460);
}
关于iphone - ifdef语法不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12527447/