【问题标题】:How to define constant based on device type (iPad/iphone)如何根据设备类型(iPad/iphone)定义常量
【发布时间】:2013-05-22 01:12:15
【问题描述】:

我正在尝试在我的项目中的一个文件中定义常量。

我知道,我可以像下面这样定义它

const CGSize kSize = { 46.f, 44.f };

但我想要达到这样的目标:

if device type iPad

const CGSize kSize = { 146.f, 144.f };

else

const CGSize kSize = { 46.f, 44.f };

有没有可能做到以上几点?

任何人都可以帮助我如何实现这一目标。任何帮助或任何指导都会有所帮助。

【问题讨论】:

  • 我用单独的类和静态方法解决了这类问题。所以你可以在其中实现更多的案例逻辑。但是只有一个你可以使用一个简单的静态变量并在类的加载中定义它
  • 标题具有误导性。我把它改成了你真正想做的事
  • @Daij-Djan :谢谢。

标签: iphone ios objective-c constants


【解决方案1】:

你可以这样实现:

#define isIpad (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define kSizeIpad CGSizeMake(146.f, 44.f)
#define kSizeIPhone CGSizeMake(46.f, 44.f)

现在您可以检查代码是否在 iPhone 或 iPad 上运行:

if (isIpad) {
    CGSize sizeIpad = kSizeIpad;
} else {
    CGSize sizeIphone = kSizeIPhone;
}

我的建议是在项目中放置一个.h 文件(例如KConstand.h)并在那里定义所有常量变量。

例如:

#ifndef Myproject_kConstant_h
#define Myproject_kConstant_h

#define isiPhone5 (CGRectGetHeight([UIScreen mainScreen].bounds) == 568) ? YES : NO
#define isiPhone (UI_USER_INTERFACE_IDIOM() == 0)

#define kSizeIpad CGSizeMake(146, 44)
#define kSizeIPhone CGSizeMake(46, 44)

#endif

【讨论】:

    【解决方案2】:
    const CGSize kSize;
    
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
      kSize = { 146, 144 };
    } else {
      kSize = { 46, 44 };
    }
    

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      如果您的应用是通用应用,那么您在编译时并不知道您的应用将在什么设备上运行(当然,您可以在 iPad 上运行 iPhone 应用,但它们会保留 iPhone 的尺寸)。您需要运行时检查以确定合适的大小。

      UIUserInterfaceIdiom idiom = UI_USER_INTERFACE_IDIOM();
      
      if (idiom == UIUserInterfaceIdiomPad) {
          // iPad
      } else if (idiom == UIUserInterfaceIdiomPhone) {
          // iPhone
      }
      

      【讨论】:

      • 您可以将其包装在方法 isIPad / isIPhone 中以获得更好看的代码
      【解决方案4】:

      将其用作:

      #define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
      
      if (IS_IPAD) {
       const CGSize kSize = { 146, 144 };
      } else {
        const CGSize kSize = { 46, 44 };
      }
      

      希望对你有帮助。

      【讨论】:

      • 这只是一个例子。您可以根据需要使其全球化。
      【解决方案5】:

      全局定义。

      #define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)    
      if(IS_IPAD)
          const CGSize kSize = { 146.f, 144.f };
      else
          const CGSize kSize = { 46.f, 44.f };
      

      检查每个班级,例如

      if(IS_IPAD)
       // kSize........for iPad
      else
       //---- else part --------
      

      【讨论】:

        猜你喜欢
        • 2012-08-05
        • 1970-01-01
        • 1970-01-01
        • 2018-11-16
        • 1970-01-01
        • 1970-01-01
        • 2023-01-19
        • 1970-01-01
        • 2011-10-26
        相关资源
        最近更新 更多