iphone - ifdef语法不起作用

标签 iphone objective-c ios macros conditional-compilation

我想根据不同的设备高度动态定义一个常数。
我尝试使用此代码,但是它不起作用:

#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/

相关文章:

ios - 无线安装时不显示 iPhone 企业应用程序图标

iphone - 在 iOS 中添加应用程序范围标题 View 的最佳实践

objective-c - 以像素为单位的 CGRect?

ios - 使 CollectionView 和 TableView 高度动态化

android - 向 acumatica 移动设备添加屏幕

iphone - dismissModalViewControllerAnimated 不返回

iphone - 即使正确调用了 NSNotification 处理程序方法,也不会在该方法内执行任何代码

ios - iOS BLE特征控制点写入-ATT错误

iphone - 您需要从文档/收件箱中删除导入的文件吗?

ios - 核心数据 - 合并具有相互值(value)的对象