![](/img/trans.png)
[英]UIView in .XIB on Universal App always reports iPhone UI size
[英]best practice to handle UI size constant in universal app?
我即将将我的iPhone应用程序转换为iPad应用程序。 iPad应用程序用户界面大多类似于双倍大小的iPhone应用程序。 我的iPhone UI的许多部分都是通过代码完成的,因此在iPad版本中,我有很多常量需要乘以双倍:
CGFloat scale = (IS_IPAD) ? 2 : 1;
kCellHeight = 140 * scale;
为所有这些常量编写代码就像一种痛苦。
有什么好的方法可以解决这个问题?
谢谢,
使用[[UIScreen mainScreen] scale]
代替,该[[UIScreen mainScreen] scale]
用于检查视网膜和非视网膜显示之间的差异。
使用[[UIDevice currentDevice] userInterfaceIdiom]
或更好的UI_USER_ITERFACE_IDIOM
宏来检查您是否在iPad或iPhone上。
如果您需要同时为iPhone和iPad生成应用程序,并且必须为iPad版本/目标将多个常量加倍,请为此定义一个宏,如下所述
[编辑]:为此使用宏的提示
如果要创建一个可以在iPhone或iPad上运行的应用程序 ,并且需要在运行时确定值,请使用sthg,如下所示:
#define ZoomOnIPad(x) (UI_USER_ITERFACE_IDIOM() == UIUserInterfaceIdiomPhone) ? (x) : (2*x)
如果要创建两个不同的应用程序 ,一个用于iPad,一个版本用于iPhone(例如,在Xcode项目中定义两个不同的目标),因此可以在编译时确定值,请定义一个具有不同值的预处理器宏对于两个目标,以便您可以区分它们(例如,在iPad目标中定义IPAD_TARGET而不在iPhone目标中定义它),然后使用sthg:
#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)来使布局灵活地适应那些更改。 这比保留2套坐标要容易。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.