如何在 ios 中适应不同的屏幕尺寸

How to fit different screen sizes in ios

我知道这个问题似乎是一个老派问题,但我找不到很好的答案,有件事:

iPhone5、iPhone6 和 iPhone6+ 的逻辑屏幕分辨率:

iPhone5   320 x 568
iPhone6   375 x 667
iPhone6+  414 x 736

假设我在屏幕中央有一个正方形 UI 元素,并且有三种方法可以在不同的设备上限制它的宽度(&高度):

  1. width不变
  2. width/screen.width不变
  3. screen.width - width不变

这三种不同的约束方式导致三种不同的外观:

Picture 1: 3 different appearances

我认为第二种约束方式(即 Picture 1 中的中间列)从设计师的角度来看是最自然的,但从程序员的角度来看是最不自然的。我需要检查设备类型并计算尺寸并为不同的设备使用不同的图像(自动布局在这种情况下无济于事)

第一种方式实施起来似乎很自然,但在实践中却很糟糕,尤其是在处理文本字体大小时。

第三个还需要通过编程判断使用哪个图像,因为三个UI元素在三个不同的设备中不匹配简单的@x2 @x3比例因子。

是否有任何解决方法可以轻松实现第二种约束方式?

如果ViewController,您可以只在容器中水平和垂直在容器中给出约束以查看哪个在中心,如果需要则给出视图本身的高度和宽度。

如果您使用故事板,您可以轻松计算出您想要的第二种方式。您可以使用超级视图提供比例宽度。 正如您在 image 中看到的 你可以让你的观点倍增。 或者您可以在代码中创建宽度约束,例如:

@IBOutlet weak var widthConstraint: NSLayoutConstraint!

您可以在代码中更新约束。

使用宏的

#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)

#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)

#define IS_RETINA ([[UIScreen mainScreen] scale] >= 2.0)

#define SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width)

#define SCREEN_HEIGHT ([[UIScreen mainScreen] bounds].size.height)

#define SCREEN_MAX_LENGTH (MAX(SCREEN_WIDTH, SCREEN_HEIGHT))

#define SCREEN_MIN_LENGTH (MIN(SCREEN_WIDTH, SCREEN_HEIGHT))

#define IS_IPHONE_4_OR_LESS (IS_IPHONE && SCREEN_MAX_LENGTH < 568.0)

#define IS_IPHONE_5 (IS_IPHONE && SCREEN_MAX_LENGTH == 568.0)

#define IS_IPHONE_6 (IS_IPHONE && SCREEN_MAX_LENGTH == 667.0)

#define IS_IPHONE_6P (IS_IPHONE && SCREEN_MAX_LENGTH == 736.0)

if(IS_PHONE_5){//TODO}

if(IS_PHONE_6){//TODO}