【问题标题】:Objective-C preprocessor directive issuesObjective-C 预处理器指令问题
【发布时间】:2012-07-17 10:51:29
【问题描述】:

我已经实现了这段代码来定义我的常量:

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

#if (IS_IPAD)
CGFloat const scrollSizeWidth = 768.0f;
CGFloat const scrollSizeHeight = 1004.0f;
#else
CGFloat const scrollSizeWidth = 320.0f;
CGFloat const scrollSizeHeight = 460.0f;
#endif

但它总是为我的变量显示 320.0f460.0f

更新: 由于 k3a 用户发现 UI_USER_INTERFACE_IDIOM 不适用于 iOS 8.3,因为它不再是定义它是静态内联。

也检查这个答案: link

【问题讨论】:

  • #ifdef UI_USER_INTERFACE_IDIOM 在 Xcode 6.3+ 中被破坏,因为它不再是预处理器定义
  • @k3a 哦,真的吗?我还没查过
  • 是的。我注意到它是因为我的应用程序在使用 Xcode 6.3+ 编译时加载了 iPhone 笔尖。这是该符号的新定义: static inline UIUserInterfaceIdiom UI_USER_INTERFACE_IDIOM() { return ([[UIDevice currentDevice] respondsToSelector:@selector(userInterfaceIdiom)] ? [[UIDevice currentDevice] userInterfaceIdiom] : UIUserInterfaceIdiomPhone); }
  • @k3a 是的,我认为我们可以使用的解决方案 [[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
  • 是的,但是原始代码部分“#ifdef UI_USER_INTERFACE_IDIOM”现在不起作用,因为 UI_USER_INTERFACE_IDIOM 不是定义而是函数;)提到它,所以人们知道...

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


【解决方案1】:

如果UIUserInterfaceIdiomPad 不是预处理器符号,则它不能用于预处理器条件。

【讨论】:

    【解决方案2】:

    变化:

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

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

    【讨论】:

    • 对不起它的工作,但现在我只得到 768.0f 1004.0f;我的意思是随时
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 2013-08-02
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    相关资源
    最近更新 更多