Iphone 在通用应用程序中处理UI大小常量的最佳实践?

Iphone 在通用应用程序中处理UI大小常量的最佳实践?,iphone,objective-c,Iphone,Objective C,我要把我的iPhone应用程序转换成iPad应用程序。 iPad应用程序的用户界面大多类似于两倍大小的iPhone应用程序。 我的iPhone UI的许多部分都是由代码完成的,所以我有很多常数需要在iPad版本中乘以两倍: CGFloat scale = (IS_IPAD) ? 2 : 1; kCellHeight = 140 * scale; 为所有这些常量编写代码就像是一件痛苦的事情 处理这个问题的好方法是什么 谢谢, 相反,使用它是为了检查视网膜和非视网膜显示之间的差异 使用宏或更好的宏

我要把我的iPhone应用程序转换成iPad应用程序。 iPad应用程序的用户界面大多类似于两倍大小的iPhone应用程序。 我的iPhone UI的许多部分都是由代码完成的,所以我有很多常数需要在iPad版本中乘以两倍:

CGFloat scale = (IS_IPAD) ? 2 : 1;
kCellHeight = 140 * scale;
为所有这些常量编写代码就像是一件痛苦的事情

处理这个问题的好方法是什么

谢谢,

  • 相反,使用它是为了检查视网膜和非视网膜显示之间的差异

  • 使用宏或更好的宏来检查您是否在iPad或iPhone上

  • 如果您需要为iPhone和iPad生成应用程序,并且需要为iPad版本/目标生成多个必须加倍的常量,请为此定义一个宏,如下所述


[编辑]:提示为此使用宏

如果您想创建一个将在iPhone或iPad上运行的应用程序,并且需要在运行时确定值,请像下面这样使用sthg:

#define ZoomOnIPad(x) (UI_USER_ITERFACE_IDIOM() == UIUserInterfaceIdiomPhone) ? (x) : (2*x)
#ifdef IPAD_TARGET
  #define ZoomOnIPad(x) 2*x
#else
  #define ZoomOnIPad(x) x
#endif
如果要创建两个不同的应用程序,一个用于iPad,一个用于iPhone(例如,在Xcode项目中定义两个不同的目标),因此可以在编译时确定值,请为两个目标定义一个具有不同值的预处理器宏,以便将它们区分开来(例如,在IPAD目标中定义IPAD_目标,而不是在iPhone目标中定义),然后像这样使用sthg:

#define ZoomOnIPad(x) (UI_USER_ITERFACE_IDIOM() == UIUserInterfaceIdiomPhone) ? (x) : (2*x)
#ifdef IPAD_TARGET
  #define ZoomOnIPad(x) 2*x
#else
  #define ZoomOnIPad(x) x
#endif
那么当然可以这样使用:

kCellHeight = ZoomOnIPad(140);
  • 相反,使用它是为了检查视网膜和非视网膜显示之间的差异

  • 使用宏或更好的宏来检查您是否在iPad或iPhone上

  • 如果您需要为iPhone和iPad生成应用程序,并且需要为iPad版本/目标生成多个必须加倍的常量,请为此定义一个宏,如下所述


[编辑]:提示为此使用宏

如果您想创建一个将在iPhone或iPad上运行的应用程序,并且需要在运行时确定值,请像下面这样使用sthg:

#define ZoomOnIPad(x) (UI_USER_ITERFACE_IDIOM() == UIUserInterfaceIdiomPhone) ? (x) : (2*x)
#ifdef IPAD_TARGET
  #define ZoomOnIPad(x) 2*x
#else
  #define ZoomOnIPad(x) x
#endif
如果要创建两个不同的应用程序,一个用于iPad,一个用于iPhone(例如,在Xcode项目中定义两个不同的目标),因此可以在编译时确定值,请为两个目标定义一个具有不同值的预处理器宏,以便将它们区分开来(例如,在IPAD目标中定义IPAD_目标,而不是在iPhone目标中定义),然后像这样使用sthg:

#define ZoomOnIPad(x) (UI_USER_ITERFACE_IDIOM() == UIUserInterfaceIdiomPhone) ? (x) : (2*x)
#ifdef IPAD_TARGET
  #define ZoomOnIPad(x) 2*x
#else
  #define ZoomOnIPad(x) x
#endif
那么当然可以这样使用:

kCellHeight = ZoomOnIPad(140);

不幸的是,iPad屏幕和iPhone屏幕的比例并不相同(iPad的宽高比为0.75,iPhone的为0.66)。差别确实很小,但如果你真的把一个iPhone应用程序的大小增加一倍,你将无法填满整个iPad屏幕


因此,如果没有使用UIKit界面,您需要通过使用自动调整大小的遮罩或手动(例如按钮x值为0.34*screenSize.width)使布局灵活地适应这些变化。这比保留两组坐标更容易。

不幸的是,iPad屏幕和iPhone屏幕的比例不同(iPad的宽高比是0.75,iPhone的是0.66)。差别确实很小,但如果你真的拿一个iPhone应用程序,把它放大一倍,你将无法填满整个iPad屏幕


因此,您需要通过使用自动调整大小掩码或手动(例如,按钮x值为0.34*screenSize.width)使布局灵活地适应这些更改如果你没有在界面上使用UIKit。这比保留两组坐标容易。

我最终做了一个修改后的解决方案,这样当我不想加倍时,我就有了更多的控制权:
#定义iui(x,y)((is_-IPAD)?(y):(x))
#定义kCellHeight iui(140280)
我最终做了一个修改后的解决方案,这样当我不想加倍时,我就有了更多的控制权:
#定义iui(x,y)((IS#u IPAD)?(y):(x))
#定义kCellHeight iui(140280)