文章目录

一、基本概念二、不同iPhone机型的pt和px关系三、不同iPhone机型的pt和px总结四、适配不同机型

一、基本概念

在iOS开发中,pt(point)和px(pixel)是两个重要的单位,它们分别代表逻辑分辨率和物理分辨率:

pt(point):

在iOS开发中,pt是一个逻辑单位,用于定义界面元素的大小。它与设备的物理尺寸和分辨率无关,旨在提供一致的用户体验。

px(pixel):

px是屏幕上的最小显示单位,即像素。它决定了图像在屏幕上的实际显示效果。

二、不同iPhone机型的pt和px关系

iPhone 3GS及更早机型:

在这些机型上,1 pt = 1 px。这是因为这些机型的屏幕像素密度较低,且iOS绘制图形时以point为单位。

iPhone 4及iPhone 4S:

从iPhone 4开始,苹果引入了Retina屏幕,像素密度翻倍。在这些机型上,1 pt = 2 px。这意味着在相同的逻辑尺寸下,Retina屏幕能够显示更多的像素点,从而提供更清晰、更细腻的图像。

iPhone 5及后续机型(除iPhone 6 Plus及更高分辨率的机型外):

这些机型继续沿用了Retina屏幕技术,但像素密度和屏幕尺寸有所不同。尽管屏幕尺寸和分辨率有所变化,但苹果通过调整缩放因子来保持UI元素的一致性。在这些机型上,1 pt仍然代表一定的物理尺寸(但不再是1个像素),而是根据设备的像素密度进行缩放。

iPhone 6 Plus及更高分辨率的机型:

从iPhone 6 Plus开始,苹果引入了更高的像素密度(约401 PPI),并引入了3x的Retina屏幕。在这些机型上,1 pt = 3 px。这进一步提升了图像的清晰度和细腻度。

三、不同iPhone机型的pt和px总结

官网链接:Apple Layout

四、适配不同机型

CGFloat screenWidth = [UIScreen mainScreen].bounds.size.width;

CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height;

CGFloat heightScale = screenHeight / 896.0;

CGFloat widthScale = screenWidth / 414.0;

// 根据UI,在不同机型上适配最佳位置

BOOL isSmall = NO;

CGFloat top = 177;

if (screenWidth == 414 && screenHeight != 896.0) {

if (screenHeight == 736.0) {

//7p,8p

widthScale = 0.95;

heightScale = 0.8;

top = 120.0;

isSmall = YES;

}

} else if (screenWidth == 375.0) {

if (screenHeight == 667) {

//7,8

widthScale = 0.85;

heightScale = 0.75;

top = 100.0;

isSmall = YES;

}

}