title: UI组件选择历程
date: 2019-04-20 17:05:41
categories:


[toc]

设备相关

一、分辨率与尺寸

最新iPhone全机型分辨率和尺寸收录

手机机型 (iPhone) 屏幕尺寸 (inch) 逻辑分辨率 (pt) 设备分辨率 (px) 缩放因子 (Scale Factor)
3G(s) 3.5 320x480 320x480 @1x
4(s) 3.5 320x480 640x960 @2x
5(s/se) 4 320x568 640x1136 @2x
6(s)/7/8 4.7 375x667 750x1334 @2x
6(s)/7/8 Plus 5.5 414x736 1242x2208 @3x
X/Xs /11 Pro 5.8 375x812 1125x2436 @3x
Xr /11\ 6.1 6.1 414x896 828×1792 @2x
Xs Max /11 Pro Max 6.5 414x896 1242×2688 @3x
12 mini 5.4 360x780 1080x2340 @3x
12/12 Pro 6.1 390x844 1170x2532 @3x
12 Pro Max 6.7 428x926 1284x2778 @3x
13 mini 5.4 360x780 1080x2340 @3x
13/13 Pro 6.1 390x844 1170x2532 @3x
13 Pro Max 6.7 428x926 1284x2778 @3x

iPhone X系列随着机型增多,屏幕尺寸也发生了改变,安全距离也不同。竖屏状态下有44、48、47等(可能还有其他数值);横竖屏切换时也不相同:横屏时左右的安全距离相同,由原来竖屏下底部安全距离34改为与顶部安全距离相同。即横屏时左右安全距离相同,都为竖屏下顶部安全距离。
适配方案:如果项目中带SceneDelegate文件可添加以下代码,不带该文件的项目可去除iOS13的判断。

+ (UIEdgeInsets)getIphoneSafeInsets {
    UIEdgeInsets safeInsets = UIEdgeInsetsMake(20, 0, 0, 0);
    if (@available(iOS 11.0, *)) {
        if (@available(iOS 13.0, *)) {
            safeInsets = [UIApplication sharedApplication].windows.firstObject.safeAreaInsets;
        }
        else {
            safeInsets = [[UIApplication sharedApplication] delegate].window.safeAreaInsets;
        }
    }

    if (safeInsets.top < 20) {
        safeInsets.top = 20;
    }

    return safeInsets;
}

End